home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 1997 #3 / Amiga Plus CD - 1997 - No. 03.iso / pd / programmierung / alienbreed3d2_src / cheesesauce / abreed3.lha / NEWTWO.s < prev    next >
Text File  |  1995-09-14  |  146KB  |  10,126 lines

  1.  
  2. CD32VER equ 1
  3.  
  4. maxscrdiv EQU 8
  5. max3ddiv EQU 5
  6. playerheight EQU 12*1024
  7. playercrouched EQU 8*1024
  8. scrheight EQU 80
  9.  
  10. ; k/j/m
  11.  
  12. ; 4/8
  13. ; s/x
  14. ; b/n
  15.  
  16. midoffset EQU 104*4*40
  17.  
  18.  
  19.  SECTION Scrn,CODE
  20. OpenLib         equ -552
  21. CloseLib        equ -414
  22.  
  23. INTREQ    equ    $09C
  24. INTENA    equ    $09A
  25. INTENAR    equ    $01C
  26. DMACON    equ    $096
  27.  
  28. SERPER    equ    $032
  29. SERDATR    equ    $018
  30. SERDAT    equ    $030
  31. vhposr        equ $006    
  32. vhposrl        equ $007 
  33.  
  34. bltcon0        equ $40 
  35. bltcon1        equ $42
  36. bltcpt        equ $48
  37. bltbpt        equ $4c
  38. bltapt        equ $50
  39. spr0ctl        equ $142
  40. spr1ctl        equ $14a
  41. spr2ctl        equ $152
  42. spr3ctl        equ $15a
  43. spr4ctl        equ $162
  44. spr5ctl        equ $16a
  45. spr6ctl        equ $172
  46. spr7ctl        equ $17a
  47. spr0pos        equ $140
  48. spr1pos        equ $148
  49. spr2pos        equ $150
  50. spr3pos        equ $158
  51. spr4pos        equ $160
  52. spr5pos        equ $168
  53. spr6pos        equ $170
  54. spr7pos        equ $178
  55. bltdpt         equ $54
  56. bltafwm        equ $44
  57. bltalwm        equ $46
  58. bltsize         equ $58
  59. bltcmod         equ $60
  60. bltbmod         equ $62
  61. bltamod         equ $64
  62. bltdmod         equ $66
  63. diwstart        equ $8e         ; Screen hardware registers.
  64. diwstop         equ $90
  65. ddfstart        equ $92
  66. ddfstop         equ $94
  67. bplcon0         equ $100
  68. bplcon1         equ $102
  69. col0            equ $180
  70. col1            equ $182
  71. col2        equ $184
  72. col3        equ $186
  73. col4        equ $188
  74. col5        equ $18a
  75. col6        equ $18c
  76. col7        equ $18e
  77. col8            equ $190
  78. col9            equ $192
  79. col10           equ $194
  80. col11           equ $196
  81. col12           equ $198
  82. col13           equ $19a
  83. dmacon        equ $96
  84. dmaconr        equ $002
  85. intenar        equ $01c
  86. intena        equ $09a
  87. intreq        equ $09c
  88. intreqr        equ $01e
  89. intreqrl    equ $01f
  90. bpl1pth         equ $e0
  91. bpl1ptl         equ $e2
  92. bpl2pth        equ $e4
  93. bpl2ptl        equ $e6
  94. bpl3pth        equ $e8
  95. bpl3ptl        equ $ea
  96. bpl4pth        equ $ec
  97. bpl4ptl        equ $ee
  98. bpl5pth        equ $f0
  99. bpl5ptl        equ $f2
  100. bpl6pth        equ $f4
  101. bpl6ptl        equ $f6
  102. bpl7pth        equ $f8
  103. bpl7ptl        equ $fa
  104. bpl8pth        equ $fc
  105. bpl8ptl        equ $fe
  106. spr0pth        equ $120
  107. spr0ptl        equ $122
  108. spr1pth        equ $124
  109. spr1ptl        equ $126
  110. spr2pth        equ $128
  111. spr2ptl        equ $12a
  112. spr3pth        equ $12c
  113. spr3ptl        equ $12e
  114. spr4pth        equ $130
  115. spr4ptl        equ $132
  116. spr5pth        equ $134
  117. spr5ptl        equ $136
  118. spr6pth        equ $138
  119. spr6ptl        equ $13a
  120. spr7pth        equ $13c
  121. spr7ptl        equ $13e
  122.  
  123. ; move.l #length,d0
  124. ; moveq.l #2,d1    ; chipmem
  125. ; move.l 4.w,a6
  126. ; jsr allocmem(a6) = -198
  127.  
  128. ; tst.l d0
  129. ; beq.s ohbugger
  130. ; move.l d0,memaddr
  131.  
  132.  
  133. ; move.l 4.w,a6
  134. ; move.l memaddr,a1
  135. ; move.l #size,d0
  136. ; jsr freemem(a6) =-210
  137.  
  138.  
  139. ** This waits for the blitter to finish before allowing program
  140. ** execution to continue.
  141.  
  142.  include "ab3:source/protsetupdecode"
  143.  
  144. SAVEREGS MACRO
  145.  movem.l d0-d7/a0-a6,-(a7)
  146.  ENDM
  147.  
  148. GETREGS MACRO
  149.  movem.l (a7)+,d0-d7/a0-a6
  150.  ENDM
  151.  
  152.  
  153. WB MACRO
  154. \@bf:
  155.  btst #6,dmaconr(a6)
  156.  bne.s \@bf
  157.  ENDM
  158.  
  159. *Another version for when a6 <> dff000
  160.  
  161. WBSLOW MACRO
  162. \@bf:
  163.  btst #6,$dff000+dmaconr
  164.  bne.s \@bf
  165.  ENDM
  166.  
  167. WT MACRO
  168. \@bf:
  169.  btst #6,(a3)
  170.  bne.s \@bd
  171.  rts
  172. \@bd: 
  173.  btst #4,(a0)
  174.  beq.s \@bf
  175.  ENDM
  176.  
  177. WTNOT MACRO
  178. \@bf:
  179.  btst #6,(a3)
  180.  bne.s \@bd
  181.  rts
  182. \@bd: 
  183.  btst #4,(a0)
  184.  bne.s \@bf
  185.  ENDM
  186.  
  187. **
  188.  
  189.  include "macros.i"
  190.  include "ab3:source/defs.i"
  191.  
  192.  move.w (a0)+,mors
  193.  
  194.  move.l #$dff000,a6    ; NB V. IMPORTANT: A6=CUSTOM BASE
  195.  move.w #13,SERPER(a6)    ;19200 baud, 8 bits, no parity
  196.  
  197.  st GOURSEL
  198.  
  199.  clr.b PLR1KEYS
  200.  clr.b PLR1PATH
  201.  clr.b PLR1MOUSE
  202.  st PLR1JOY
  203.  clr.b PLR2KEYS
  204.  clr.b PLR2PATH
  205.  clr.b PLR2MOUSE
  206.  st PLR2JOY
  207.  
  208.  PRSDO
  209.  
  210.  move.l #2,d1    
  211.  move.l #10240*2,d0
  212.  move.l 4.w,a6
  213.  jsr -198(a6)
  214.  move.l d0,TEXTSCRN
  215.  move.w d0,TSPTl
  216.  swap d0
  217.  move.w d0,TSPTh
  218.  
  219.  move.l #nullspr,d0
  220.  move.w d0,txs0l
  221.  move.w d0,txs1l
  222.  move.w d0,txs2l
  223.  move.w d0,txs3l
  224.  move.w d0,txs4l
  225.  move.w d0,txs5l
  226.  move.w d0,txs6l
  227.  move.w d0,txs7l
  228.  swap d0
  229.  move.w d0,txs0h
  230.  move.w d0,txs1h
  231.  move.w d0,txs2h
  232.  move.w d0,txs3h
  233.  move.w d0,txs4h
  234.  move.w d0,txs5h
  235.  move.w d0,txs6h
  236.  move.w d0,txs7h 
  237.  
  238.  move.l #1,d1    
  239.  move.l #120000,d0
  240.  move.l 4.w,a6
  241.  jsr -198(a6)
  242.  move.l d0,LEVELDATA
  243.  
  244.  jsr START
  245.  
  246.  rts
  247.  
  248. * Load level into buffers.
  249.  clr.b doanything
  250.  
  251. ; DRAW TEXT SCREEN
  252.  
  253. TWEENTEXT:
  254.  
  255.  move.l #LEVELTEXT,a0
  256.  move.w PLOPT,d0
  257.  muls #82*16,d0
  258.  add.l d0,a0
  259.  
  260.  move.w #14,d7
  261.  move.w #0,d0
  262. DOWNTEXT:
  263.  move.l TEXTSCRN,a1
  264.  jsr DRAWLINEOFTEXT
  265.  addq #1,d0
  266.  add.w #82,a0
  267.  dbra d7,DOWNTEXT
  268.  rts
  269.  
  270. FONTADDRS:
  271.  dc.l ENDFONT0,CHARWIDTHS0
  272.  dc.l ENDFONT1,CHARWIDTHS1
  273.  dc.l ENDFONT2,CHARWIDTHS2
  274.  
  275. ENDFONT0:
  276.  incbin "endfont0"
  277. CHARWIDTHS0:
  278.  incbin "charwidths0"
  279. ENDFONT1:
  280.  incbin "endfont1"
  281. CHARWIDTHS1:
  282.  incbin "charwidths1"
  283. ENDFONT2:
  284.  incbin "endfont2"
  285. CHARWIDTHS2:
  286.  incbin "charwidths2"
  287.  
  288.  even
  289.  
  290. DRAWLINEOFTEXT:
  291.  movem.l d0/a0/d7,-(a7)
  292.  
  293.  muls #80*16,d0
  294.  add.l d0,a1    ; screen pointer
  295.  
  296.  move.l #FONTADDRS,a3
  297.  moveq #0,d0
  298.  move.b (a0)+,d0
  299.  move.l (a3,d0.w*8),a2
  300.  move.l 4(a3,d0.w*8),a3
  301.  
  302.  moveq #0,d1    ; width counter:
  303.  move.w #79,d6
  304.  tst.b (a0)+
  305.  beq.s NOTCENTRED
  306.  moveq #-1,d5
  307.  move.l a0,a4
  308.  moveq #0,d2
  309.  moveq #0,d3
  310.  move.w #79,d0    ; number of chars
  311. .addup:
  312.  addq #1,d5
  313.  move.b (a4)+,d2
  314.  move.b -32(a3,d2.w),d4
  315.  add.w d4,d3
  316.  cmp.b #32,d2
  317.  beq.s .DONTPUTIN
  318.  move.w d5,d6
  319.  move.w d3,d1
  320. .DONTPUTIN:
  321.  dbra d0,.addup
  322.  asr.w #1,d1
  323.  neg.w d1
  324.  add.w #320,d1    ; horiz pos of start x
  325.  
  326. NOTCENTRED:
  327.  move.w d6,d7
  328. DOACHAR:
  329.  moveq #0,d2
  330.  move.b (a0)+,d2
  331.  sub.w #32,d2
  332.  moveq #0,d6
  333.  move.b (a3,d2.w),d6
  334.  asl.w #5,d2
  335.  lea (a2,d2.w),a4    ; char font
  336. val SET 0
  337.  REPT 16
  338.  move.w (a4)+,d0
  339.  bfins d0,val(a1){d1:d6}
  340. val SET val+80
  341.  ENDR
  342.  add.w d6,d1
  343.  dbra d7,DOACHAR
  344.  movem.l (a7)+,d0/a0/d7
  345.  rts 
  346.  
  347.  
  348. CLRTWEENSCRN:
  349.  move.l TEXTSCRN,a0
  350.  move.w #(10240/16)-1,d0
  351.  move.l #$0,d1
  352. .lll
  353.  move.l d1,(a0)+
  354.  move.l d1,(a0)+
  355.  move.l d1,(a0)+
  356.  move.l d1,(a0)+
  357.  move.l d1,(a0)+
  358.  move.l d1,(a0)+
  359.  move.l d1,(a0)+
  360.  move.l d1,(a0)+
  361.  dbra d0,.lll
  362.  rts
  363.  
  364. PLAYTHEGAME:
  365.  
  366.  move.w #0,TXTCOLL
  367.  
  368.  bsr CLRTWEENSCRN
  369.  
  370.  cmp.b #'n',mors
  371.  bne.s .notext
  372.  bsr TWEENTEXT
  373. .notext
  374.  
  375.  move.l #TEXTCOP,$dff080
  376.  
  377.  move.w #$10,d0
  378.  move.w #7,d1
  379.  
  380. .fdup
  381.  move.w d0,TXTCOLL
  382.  add.w #$121,d0
  383. .wtframe:
  384.  btst #5,$dff000+intreqrl
  385.  beq.s .wtframe
  386.  move.w #$0020,$dff000+intreq
  387.  dbra d1,.fdup
  388.  
  389.  jsr INITCOPPERSCRN
  390.  
  391. ; Get level memory.
  392.  
  393.  move.l #1,d1
  394.  move.l #50000,d0
  395.  move.l 4.w,a6
  396.  jsr -198(a6)
  397.  move.l d0,LEVELGRAPHICS
  398.  
  399.  move.l #1,d1
  400.  move.l #40000,d0
  401.  move.l 4.w,a6
  402.  jsr -198(a6)
  403.  move.l d0,LEVELCLIPS
  404.  
  405.  move.l #$dff000,a6
  406.  jsr SETPLAYERS
  407.  
  408. ; move.l #LEVELDATAD,LEVELDATA
  409. ; move.l #LEVELGRAPHICSD,LEVELGRAPHICS
  410. ; move.l #LEVELCLIPSD,LEVELCLIPS
  411.  
  412. ; bra noload
  413.  
  414.  move.l doslib,a6
  415.  move.l #LDname,d1
  416.  move.l #1005,d2
  417.  jsr -30(a6)
  418.  move.l d0,LDhandle
  419.  
  420.  move.l doslib,a6
  421.  move.l d0,d1
  422.  move.l LEVELCLIPS,d2
  423.  move.l #40000,d3
  424.  jsr -42(a6)
  425.  
  426.  move.l doslib,a6
  427.  move.l LDhandle,d1
  428.  jsr -36(a6)
  429.  
  430. *************************************
  431.     move.l    LEVELCLIPS,d0
  432.     moveq    #0,d1
  433.     move.l LEVELDATA,a0
  434.     lea    WorkSpace,a1
  435.     lea    $0,a2
  436.     jsr    unLHA
  437. *************************************
  438.  
  439. ********
  440.  
  441.  move.l doslib,a6
  442.  move.l #LGname,d1
  443.  move.l #1005,d2
  444.  jsr -30(a6)
  445.  move.l d0,LGhandle
  446.  
  447.  move.l doslib,a6
  448.  move.l d0,d1
  449.  move.l LEVELCLIPS,d2
  450.  move.l #40000,d3
  451.  jsr -42(a6)
  452.  
  453.  move.l doslib,a6
  454.  move.l LGhandle,d1
  455.  jsr -36(a6)
  456.  
  457. *************************************
  458.     move.l    LEVELCLIPS,d0
  459.     moveq    #0,d1
  460.     move.l LEVELGRAPHICS,a0
  461.     lea    WorkSpace,a1
  462.     lea    $0,a2
  463.     jsr    unLHA
  464. *************************************
  465.  
  466.  
  467. ********
  468.  
  469.  move.l doslib,a6
  470.  move.l #LCname,d1
  471.  move.l #1005,d2
  472.  jsr -30(a6)
  473.  move.l d0,LChandle
  474.  
  475.  move.l doslib,a6
  476.  move.l d0,d1
  477.  move.l #WorkSpace+16384,d2
  478.  move.l #16000,d3
  479.  jsr -42(a6)
  480.  
  481.  move.l doslib,a6
  482.  move.l LChandle,d1
  483.  jsr -36(a6)
  484.  
  485. *************************************
  486.     move.l    #WorkSpace+16384,d0
  487.     moveq    #0,d1
  488.     move.l LEVELCLIPS,a0
  489.     lea    WorkSpace,a1
  490.     lea    $0,a2
  491.     jsr    unLHA
  492. *************************************
  493.  
  494.  
  495. *******
  496.  
  497. noload:
  498.  
  499. ********
  500.  
  501. ; move.l doslib,a6
  502. ; move.l #Prefsname,d1
  503. ; move.l #1005,d2
  504. ; jsr -30(a6)
  505. ; move.l d0,Prefshandle
  506.  
  507. ; move.l doslib,a6
  508. ; move.l d0,d1
  509. ; move.l #Prefsfile,d2
  510. ; move.l #50,d3
  511. ; jsr -42(a6)
  512.  
  513. ; move.l doslib,a6
  514. ; move.l Prefshandle,d1
  515. ; jsr -36(a6)
  516.  
  517. *******
  518.  
  519.  cmp.b #'s',Prefsfile+2
  520.  seq STEREO
  521.  
  522.  IFNE CD32VER
  523.  move.l doslib,a6
  524.  move.l #115,d1
  525.  jsr -198(a6)
  526.  ENDC
  527.  
  528.  
  529.  move.l doslib,d0
  530.  move.l d0,a1
  531.  move.l 4.w,a6
  532.  jsr CloseLib(a6)
  533.  
  534.  move.l #$dff000,a6
  535.  move.w #$87c0,dmacon(a6)
  536.  move.w #$8020,dmacon(a6)
  537.  move.w intenar(a6),saveinters
  538.  move.w #$7fff,intena(a6)
  539.  move.w #$00ff,$dff09e
  540.  
  541. *** Put myself in supervisor mode
  542.  
  543.  bra blag
  544. ; move.l $6c,d0
  545. ; move.l #blag,$6c
  546. ; move.w #$8010,intreq(a6)
  547.  
  548.  rts
  549.  
  550. saveit: ds.l 10
  551. doslibname: dc.b 'dos.library',0
  552.  even
  553. doslib: dc.l 0
  554.  
  555. mors: dc.w 0
  556.  
  557. LDname: dc.b 'ab3d2:levels/level_'
  558. LEVA:
  559.  dc.b 'a/twolev.bin',0
  560.  even
  561. LDhandle: dc.l 0
  562. LGname: dc.b 'ab3d2:levels/level_'
  563. LEVB:
  564.  dc.b 'a/twolev.graph.bin',0
  565.  even
  566. LGhandle: dc.l 0
  567. LCname: dc.b 'ab3d2:levels/level_'
  568. LEVC:
  569.  dc.b 'a/twolev.clips',0
  570.  even
  571. LChandle: dc.l 0
  572.  
  573. Prefsname: dc.b 'ram:prefs',0
  574.  even
  575. Prefshandle: dc.l 0
  576.  
  577. Prefsfile:
  578.  dc.b 'k4nx'
  579.  ds.b 50
  580.  
  581.  even
  582.  
  583. VBLANKInt
  584.  dc.l 0,0
  585.  dc.b 5,10
  586.  dc.l 0
  587.  dc.l 0
  588.  dc.l Chan0inter
  589.  
  590.  
  591. blag:
  592. ; move.w #$10,intreq(a6)
  593. ; move.l d0,$6c
  594. ; move.w #$7fff,intena(a6)
  595.  
  596.  move.w #$20,$dff1dc
  597.  
  598.  move.l 4.w,a6
  599.  lea VBLANKInt,a1
  600.  moveq #5,d0
  601.  jsr _LVOAddIntServer(a6)
  602.  
  603. ****************************
  604. * Initialize level
  605. ****************************
  606. * Poke all clip offsets into
  607. * correct bit of level data.
  608. ****************************
  609.  move.l LEVELGRAPHICS,a0
  610.  move.l 12(a0),a1
  611.  add.l a0,a1
  612.  move.l a1,ZoneGraphAdds
  613.  move.l (a0),a1
  614.  add.l a0,a1
  615.  move.l a1,DoorData
  616.  move.l 4(a0),a1
  617.  add.l a0,a1
  618.  move.l a1,LiftData
  619.  move.l 8(a0),a1
  620.  add.l a0,a1
  621.  move.l a1,SwitchData
  622.  adda.w #16,a0
  623.  move.l a0,ZoneAdds
  624.  
  625.  move.l LEVELDATA,a1
  626.  move.l 16+6(a1),a2
  627.  add.l a1,a2
  628.  move.l a2,Points
  629.  move.w 8+6(a1),d0
  630.  lea 4(a2,d0.w*4),a2
  631.  move.l a2,PointBrights
  632.  
  633.  move.l 20+6(a1),a2
  634.  add.l a1,a2
  635.  move.l a2,FloorLines
  636.  move.l 24+6(a1),a2
  637.  add.l a1,a2
  638.  move.l a2,ObjectData
  639. *****************************************
  640. * Just for charles
  641.  
  642. ; move.w #$6060,6(a2)
  643. ; move.l #$d0000,8(a2)
  644. ; sub.w #40,4(a2)
  645. ; move.w #45*256+45,14(a2)
  646. ****************************************
  647.  move.l 28+6(a1),a2
  648.  add.l a1,a2
  649.  move.l a2,PlayerShotData
  650.  move.l 32+6(a1),a2
  651.  add.l a1,a2
  652.  move.l a2,NastyShotData
  653.  
  654.  add.l #64*20,a2
  655.  move.l a2,OtherNastyData
  656.  
  657.  move.l 36+6(a1),a2
  658.  add.l a1,a2
  659.  move.l a2,ObjectPoints  
  660.  move.l 40+6(a1),a2
  661.  add.l a1,a2
  662.  move.l a2,PLR1_Obj
  663.  move.l 44+6(a1),a2
  664.  add.l a1,a2
  665.  move.l a2,PLR2_Obj
  666.  move.w 14+6(a1),NumObjectPoints
  667.  
  668. ; bra noclips
  669.   
  670.  move.l LEVELCLIPS,a2
  671.  moveq #0,d0
  672.  move.w 10+6(a1),d7    ;numzones
  673. assignclips:
  674.  move.l (a0)+,a3
  675.  add.l a1,a3    ; pointer to a zone
  676.  adda.w #ToListOfGraph,a3 ; pointer to zonelist
  677. dowholezone:
  678.  tst.w (a3)
  679.  blt.s nomorethiszone
  680.  tst.w 2(a3)
  681.  blt.s thisonenull
  682.  
  683.  move.l d0,d1
  684.  asr.l #1,d1
  685.  move.w d1,2(a3)
  686.  
  687. findnextclip:
  688.  cmp.w #-2,(a2,d0.l)
  689.  beq.s foundnextclip
  690.  addq.l #2,d0
  691.  bra.s findnextclip
  692. foundnextclip
  693.  addq.l #2,d0
  694.  
  695. thisonenull:
  696.  addq #8,a3 
  697.  bra.s dowholezone
  698. nomorethiszone:
  699.  dbra d7,assignclips
  700.  
  701.  lea (a2,d0.l),a2
  702.  move.l a2,CONNECT_TABLE
  703.  
  704. noclips:
  705.  
  706. * Put in addresses of glowything
  707.  
  708.  
  709. ************************************
  710.  
  711. ; cmp.b #'k',Prefsfile
  712. ; bne.s nkb
  713.  
  714. ;nkb:
  715. ; cmp.b #'m',Prefsfile
  716. ; bne.s nmc
  717. ; clr.b PLR1KEYS
  718. ; clr.b PLR1PATH
  719. ; st PLR1MOUSE
  720. ; clr.b PLR1JOY
  721. ;nmc:
  722. ; cmp.b #'j',Prefsfile
  723. ; bne.s njc
  724. ; clr.b PLR1KEYS
  725. ; clr.b PLR1PATH
  726. ; clr.b PLR1MOUSE
  727. ; st PLR1JOY
  728. ;njc:
  729.  
  730.  clr.b PLR1_StoodInTop
  731.  move.l #playerheight,PLR1s_height
  732.  
  733.  move.l #empty,pos1LEFT
  734.  move.l #empty,pos2LEFT
  735.  move.l #empty,pos1RIGHT
  736.  move.l #empty,pos2RIGHT
  737.  move.l #emptyend,Samp0endLEFT
  738.  move.l #emptyend,Samp1endLEFT
  739.  move.l #emptyend,Samp0endRIGHT
  740.  move.l #emptyend,Samp1endRIGHT
  741.  
  742.  move.l #nullspr,d0
  743.  move.w d0,s4l
  744.  move.w d0,s5l
  745.  move.w d0,s6l
  746.  move.w d0,s7l
  747.  swap d0
  748.  move.w d0,s4h
  749.  move.w d0,s5h
  750.  move.w d0,s6h
  751.  move.w d0,s7h 
  752.  
  753.  move.l #nullline,d0
  754.  move.w d0,n1l
  755.  swap d0
  756.  move.w d0,n1h
  757.  
  758.  move.l Panel,d0
  759.  move.w d0,p1l
  760.  swap d0
  761.  move.w d0,p1h
  762.  swap d0
  763.  add.l #40,d0
  764.  move.w d0,p2l
  765.  swap d0
  766.  move.w d0,p2h
  767.  swap d0
  768.  add.l #40,d0
  769.  move.w d0,p3l
  770.  swap d0
  771.  move.w d0,p3h
  772.  swap d0
  773.  add.l #40,d0
  774.  move.w d0,p4l
  775.  swap d0
  776.  move.w d0,p4h
  777.  swap d0
  778.  add.l #40,d0
  779.  move.w d0,p5l
  780.  swap d0
  781.  move.w d0,p5h
  782.  swap d0
  783.  add.l #40,d0
  784.  move.w d0,p6l
  785.  swap d0
  786.  move.w d0,p6h
  787.  swap d0
  788.  add.l #40,d0
  789.  move.w d0,p7l
  790.  swap d0
  791.  move.w d0,p7h
  792.  swap d0
  793.  add.l #40,d0
  794.  move.w d0,p8l
  795.  swap d0
  796.  move.w d0,p8h
  797.  
  798. *******************************
  799. * TIMER SCREEN SETUP
  800. ; move.l #TimerScr,d0
  801. ; move.w d0,p1l
  802. ; swap d0
  803. ; move.w d0,p1h
  804. ; move.w #$1201,Panelcon
  805.  
  806.  move.l #borders,d0
  807.  move.w d0,s0l
  808.  swap d0
  809.  move.w d0,s0h
  810.  move.l #borders+2592,d0
  811.  move.w d0,s1l
  812.  swap d0
  813.  move.w d0,s1h
  814.  move.l #borders+2592*2,d0
  815.  move.w d0,s2l
  816.  swap d0
  817.  move.w d0,s2h
  818.  move.l #borders+2592*3,d0
  819.  move.w d0,s3l
  820.  swap d0
  821.  move.w d0,s3h
  822.  
  823.  move.w #52*256+64,borders
  824.  move.w #212*256+0,borders+8
  825.  move.w #52*256+64,borders+2592
  826.  move.w #212*256+128,borders+8+2592
  827.  move.w #52*256+192,borders+2592*2
  828.  move.w #212*256+0,borders+8+2592*2
  829.  move.w #52*256+192,borders+2592*3
  830.  move.w #212*256+128,borders+8+2592*3
  831.  
  832.  move.l #FacePlace,d0
  833.  move.w d0,f1l
  834.  swap d0
  835.  move.w d0,f1h
  836.  move.l #FacePlace+32*24,d0
  837.  move.w d0,f2l
  838.  swap d0
  839.  move.w d0,f2h
  840.  move.l #FacePlace+32*24*2,d0
  841.  move.w d0,f3l
  842.  swap d0
  843.  move.w d0,f3h
  844.  move.l #FacePlace+32*24*3,d0
  845.  move.w d0,f4l
  846.  swap d0
  847.  move.w d0,f4h
  848.  move.l #FacePlace+32*24*4,d0
  849.  move.w d0,f5l
  850.  swap d0
  851.  move.w d0,f5h
  852.   
  853.  
  854.  move.l #bigfield,d0
  855.  move.w d0,ocl
  856.  swap d0
  857.  move.w d0,och
  858.  
  859.  bset.b #1,$bfe001
  860.  
  861. ; jmp stuff
  862. ;endstuff:
  863.  
  864.  move.w #$00ff,$dff09e
  865.  
  866. ; move.l #Blurbfield,$dff080
  867.  
  868.  move.w #0,d0
  869.  
  870.  move.l #scrn,d0
  871.  move.w d0,pl1l
  872.  swap d0
  873.  move.w d0,pl1h
  874.  
  875.  move.l #scrn+40,d0
  876.  move.w d0,pl2l
  877.  swap d0
  878.  move.w d0,pl2h
  879.  
  880.  move.l #scrn+80,d0
  881.  move.w d0,pl3l
  882.  swap d0
  883.  move.w d0,pl3h
  884.  
  885.  move.l #scrn+120,d0
  886.  move.w d0,pl4l
  887.  swap d0
  888.  move.w d0,pl4h
  889.  
  890.  move.l #scrn+160,d0
  891.  move.w d0,pl5l
  892.  swap d0
  893.  move.w d0,pl5h
  894.  
  895.  move.l #scrn+200,d0
  896.  move.w d0,pl6l
  897.  swap d0
  898.  move.w d0,pl6h
  899.  
  900.  move.l #scrn+240,d0
  901.  move.w d0,pl7l
  902.  swap d0
  903.  move.w d0,pl7h
  904.  
  905.  
  906. ****************************
  907.  jsr INITPLAYER
  908. ; bsr initobjpos
  909. ****************************
  910.  
  911.  
  912.  move.l #$dff000,a6
  913.  
  914.  move.l #null,$dff0a0
  915.  move.w #100,$dff0a4
  916.  move.w #443,$dff0a6
  917.  move.w #63,$dff0a8
  918.  
  919.  move.l #null2,$dff0b0
  920.  move.w #100,$dff0b4
  921.  move.w #443,$dff0b6
  922.  move.w #63,$dff0b8
  923.  
  924.  move.l #null4,$dff0c0
  925.  move.w #100,$dff0c4
  926.  move.w #443,$dff0c6
  927.  move.w #63,$dff0c8
  928.  
  929.  move.l #null3,$dff0d0
  930.  move.w #100,$dff0d4
  931.  move.w #443,$dff0d6
  932.  move.w #63,$dff0d8
  933.  
  934.  move.l #tab,a1
  935.  move.w #64,d7
  936.  move.w #0,d6
  937. outerlop
  938.  move.l #pretab,a0
  939.  move.w #255,d5
  940. scaledownlop:
  941.  move.b (a0)+,d0
  942.  ext.w d0
  943.  ext.l d0
  944.  muls d6,d0
  945.  asr.l #6,d0
  946.  move.b d0,(a1)+
  947.  dbra d5,scaledownlop
  948.  addq #1,d6
  949.  dbra d7,outerlop
  950.  
  951.  move.l #$dff000,a6
  952.  
  953.  move.w #$c018,intena(a6)
  954.  
  955.  move.w #$f,dmacon(a6)
  956.  move.w #$820f,dmacon(a6)
  957.  
  958. ; bsr protinit
  959.  
  960.  
  961. ; move.w #$20,$1dc(a6)
  962.  
  963.  move.w #$0,$dff034
  964.  move.w #0,Conditions
  965.  
  966.  cmp.b #'n',mors
  967.  beq.s .nokeys
  968.  move.w #%111111111111,Conditions
  969. .nokeys:
  970.  
  971.  move.l #KeyMap,a5
  972.  clr.b $45(a5)
  973.  
  974.  move.l #ingame,mt_data
  975.  clr.b UseAllChannels
  976.  
  977. ; cmp.b #'b',Prefsfile+3
  978. ; bne.s .noback
  979. ; jsr mt_init
  980. ;.noback:
  981. ;
  982. ; clr.b CHANNELDATA
  983. ; clr.b CHANNELDATA+8
  984. ; clr.b CHANNELDATA+16
  985. ; clr.b CHANNELDATA+24
  986. ;
  987. ; cmp.b #'b',Prefsfile+3
  988. ; bne.s noreserve
  989. ;
  990. ; st CHANNELDATA
  991. ; st CHANNELDATA+8
  992. ; st CHANNELDATA+16
  993. ; st CHANNELDATA+24
  994. ;noreserve: 
  995.  
  996. ; st CHANNELDATA
  997. ; st CHANNELDATA+8
  998.  
  999.  move.l SampleList+6*8,pos0LEFT
  1000.  move.l SampleList+6*8+4,Samp0endLEFT
  1001.  move.l #playerheight,PLR1s_targheight
  1002.  move.l #playerheight,PLR1s_height
  1003.  move.l #playerheight,PLR2s_targheight
  1004.  move.l #playerheight,PLR2s_height
  1005.  
  1006. ; cmp.b #'n',mors
  1007. ; beq.s nohandshake
  1008. ;
  1009. ; move.b #%11011000,$bfd200
  1010. ; move.b #%00010000,$bfd000
  1011. ;waitloop:
  1012. ; btst.b #4,$bfd000
  1013. ; bne.s waitloop
  1014. ; move.b #%11000000,$bfd200
  1015.  
  1016. ;wtmouse:
  1017. ; btst #6,$bfe001
  1018. ; bne.s wtmouse
  1019.  
  1020. ;nohandshake:
  1021.  st doanything
  1022.  
  1023. ; jmp end
  1024.  
  1025.  move.l COPSCRN1,drawpt
  1026.  move.l COPSCRN2,olddrawpt
  1027.  
  1028.  IFEQ CD32VER
  1029.  jsr KInt_Init
  1030.  jsr CLEARKEYBOARD
  1031.  ENDC
  1032.  jsr MAKEBACKROUT
  1033.  
  1034.  clr.b MASTERQUITTING
  1035.  
  1036.  cmp.b #'n',mors
  1037.  seq SLAVEQUITTING
  1038.  
  1039.  move.w #127,PLR2_energy
  1040.  
  1041. ; move.l #ANOTHERSUP,$80
  1042. ; trap #0
  1043. ; rts
  1044. ;
  1045. ;ANOTHERSUP:
  1046.  
  1047.  CACHE_FREEZE_OFF d2
  1048.  
  1049.  move.w #0,hitcol
  1050.  move.w #0,hitcol2
  1051.  
  1052.  cmp.b #'n',mors
  1053.  bne.s NOCLTXT
  1054.  
  1055.  move.b #0,lastpressed
  1056. .wtpress
  1057.  btst #6,$bfe001
  1058.  beq.s CLOSETXT
  1059.  btst #7,$bfe001
  1060.  beq.s CLOSETXT
  1061.  tst.b lastpressed
  1062.  beq.s .wtpress
  1063.  
  1064. CLOSETXT:
  1065.  
  1066.  move.w #$8f8,d0
  1067.  move.w #7,d1
  1068.  
  1069. .fdup
  1070.  move.w d0,TXTCOLL
  1071.  sub.w #$121,d0
  1072. .wtframe:
  1073.  btst #5,$dff000+intreqrl
  1074.  beq.s .wtframe
  1075.  move.w #$0020,$dff000+intreq
  1076.  dbra d1,.fdup
  1077.  
  1078.  move.w #0,TXTCOLL
  1079.  
  1080. NOCLTXT:
  1081.  
  1082.  move.l #bigfield,$dff080    ; Point the copper at our copperlist.
  1083.  
  1084.  clr.b PLR1_Ducked
  1085.  clr.b PLR2_Ducked
  1086.  clr.b p1_ducked
  1087.  clr.b p2_ducked
  1088.  
  1089. ********************************************
  1090. ; jmp  ENDGAMESCROLL
  1091. ********************************************
  1092.  
  1093.  DATA_CACHE_ON d2
  1094.  
  1095. lop:
  1096.  
  1097.  
  1098.  cmp.b #'n',mors
  1099.  bne .nopause
  1100.  
  1101.  move.l #KeyMap,a5
  1102.  tst.b $19(a5)
  1103.  beq.s .nopause
  1104.  clr.b doanything
  1105.  
  1106. .waitrel:
  1107.  tst.b $19(a5)
  1108.  bne.s .waitrel
  1109.  
  1110.  bsr PAUSEOPTS
  1111.  
  1112.  
  1113.  st doanything
  1114. .nopause: 
  1115.  
  1116.  st READCONTROLS
  1117.  move.l #$dff000,a6
  1118.  
  1119.  move.w hitcol,d0
  1120.  beq.s nofadedownhc
  1121.  sub.w #$100,d0
  1122.  move.w d0,hitcol
  1123.  move.w d0,hitcol2
  1124. nofadedownhc:
  1125.  
  1126.  cmp.b #'n',mors
  1127.  beq .nopause
  1128.  
  1129.  move.b SLAVEPAUSE,d0
  1130.  or.b MASTERPAUSE,d0
  1131.  beq.s .nopause
  1132.  clr.b doanything
  1133.  
  1134.  move.l #KeyMap,a5
  1135. .waitrel:
  1136.  tst.b $19(a5)
  1137.  bne.s .waitrel
  1138.  
  1139.  bsr PAUSEOPTS
  1140.  
  1141.  cmp.b #'m',mors
  1142.  bne.s .slavelast
  1143.  Jsr SENDFIRST
  1144.  bra .masfirst
  1145. .slavelast
  1146.  Jsr RECFIRST
  1147. .masfirst:
  1148.  clr.b SLAVEPAUSE
  1149.  clr.b MASTERPAUSE
  1150.  st doanything
  1151.  
  1152. .nopause: 
  1153.  
  1154.  
  1155.  
  1156.  move.l drawpt,d0
  1157.  move.l olddrawpt,drawpt
  1158.  move.l d0,olddrawpt
  1159.  move.l d0,$dff084    
  1160.  move.l drawpt,a3
  1161. ; move.l COPSCRNBUFF,a3
  1162.  adda.w #10,a3
  1163.  move.l a3,frompt
  1164.  add.l #104*4*40,a3
  1165.  move.l a3,midpt
  1166.  
  1167.  cmp.b #'s',mors
  1168.  beq.s nowaitslave
  1169.  
  1170. waitfortop:
  1171.  btst.b #0,intreqrl(a6)
  1172.  beq waitfortop
  1173.  move.w #$1,intreq(a6)
  1174.  move.l #PLR1_GunData,GunData
  1175.  move.b PLR1_GunSelected,GunSelected
  1176.  bra waitmaster
  1177.  
  1178. nowaitslave:
  1179.  move.l #PLR2_GunData,GunData
  1180.  move.b PLR2_GunSelected,GunSelected
  1181. waitmaster:
  1182.  
  1183.  
  1184.  move.l waterpt,a0
  1185.  move.l (a0)+,watertouse
  1186.  cmp.l #endwaterlist,a0
  1187.  blt.s okwat
  1188.  move.l #waterlist,a0
  1189. okwat:
  1190.  move.l a0,waterpt
  1191.  
  1192.  add.w #640,wtan
  1193.  and.w #8191,wtan
  1194.  add.w #1,wateroff
  1195.  and.w #63,wateroff
  1196.  
  1197.  move.l GunData,a6
  1198.  moveq #0,d0
  1199.  move.b GunSelected,d0
  1200.  lsl.w #2,d0
  1201.  lea (a6,d0.w*8),a6
  1202.  move.w (a6),d0
  1203.  asr.w #3,d0
  1204.  move.w d0,Ammo
  1205.  
  1206.  move.l PLR1_xoff,OLDX1
  1207.  move.l PLR1_zoff,OLDZ1
  1208.  move.l PLR2_xoff,OLDX2
  1209.  move.l PLR2_zoff,OLDZ2
  1210.  
  1211.  
  1212.  
  1213.  move.l #$dff000,a6
  1214.  
  1215.  cmp.b #'s',mors
  1216.  beq ASlaveShouldWaitOnHisMaster
  1217.  
  1218.  cmp.b #'n',mors
  1219.  bne NotOnePlayer
  1220.  
  1221.  move.w PLR1_energy,Energy
  1222.  move.w FramesToDraw,TempFrames
  1223.  cmp.w #15,TempFrames
  1224.  blt.s .okframe
  1225.  move.w #15,TempFrames
  1226. .okframe:
  1227.  move.w #0,FramesToDraw
  1228.  
  1229. *********************************************
  1230. *********** TAKE THIS OUT *******************
  1231. *********************************************
  1232.  
  1233.  move.l #KeyMap,a5
  1234.  tst.b (a5)
  1235.  beq.s .nocheat
  1236.  move.w #127,PLR1_energy
  1237.  bsr EnergyBar
  1238. .nocheat
  1239. **********************************************
  1240. **********************************************
  1241. **********************************************
  1242.  
  1243.  move.l PLR1s_xoff,p1_xoff
  1244.  move.l PLR1s_zoff,p1_zoff
  1245.  move.l PLR1s_yoff,p1_yoff
  1246.  move.l PLR1s_height,p1_height
  1247.  move.w PLR1s_angpos,p1_angpos
  1248.  move.w PLR1_bobble,p1_bobble
  1249.  move.b PLR1_clicked,p1_clicked
  1250.  move.b PLR1_fire,p1_fire
  1251.  clr.b PLR1_clicked
  1252.  move.b PLR1_SPCTAP,p1_spctap
  1253.  clr.b PLR1_SPCTAP
  1254.  move.b PLR1_Ducked,p1_ducked
  1255.  move.b PLR1_GunSelected,p1_gunselected
  1256.  
  1257.  bsr PLR1_Control
  1258.  
  1259.  move.l PLR1_Roompt,a0
  1260.  move.l ToZoneRoof(a0),SplitHeight
  1261.  move.w p1_xoff,THISPLRxoff
  1262.  move.w p1_zoff,THISPLRzoff
  1263.  
  1264.  
  1265.  move.l #$60000,p2_yoff
  1266.  move.l PLR2_Obj,a0
  1267.  move.w #-1,GraphicRoom(a0)
  1268.  move.w #-1,12(a0)
  1269.  move.b #0,17(a0)
  1270.  move.l #BollocksRoom,PLR2_Roompt
  1271.  
  1272.  bra donetalking
  1273.  
  1274. NotOnePlayer:
  1275.  move.l #KeyMap,a5
  1276.  tst.b $19(a5)
  1277.  sne MASTERPAUSE
  1278.  
  1279. *********************************
  1280.  move.w PLR1_energy,Energy
  1281. ; change this back
  1282. *********************************
  1283.  
  1284.  jsr SENDFIRST
  1285.  
  1286.  move.w FramesToDraw,TempFrames
  1287.  cmp.w #15,TempFrames
  1288.  blt.s .okframe
  1289.  move.w #15,TempFrames
  1290. .okframe:
  1291.  move.w #0,FramesToDraw
  1292.  
  1293.  move.l PLR1s_xoff,p1_xoff
  1294.  move.l PLR1s_zoff,p1_zoff
  1295.  move.l PLR1s_yoff,p1_yoff
  1296.  move.l PLR1s_height,p1_height
  1297.  move.w PLR1s_angpos,p1_angpos
  1298.  move.w PLR1_bobble,p1_bobble
  1299.  move.b PLR1_clicked,p1_clicked
  1300.  clr.b PLR1_clicked
  1301.  move.b PLR1_fire,p1_fire
  1302.  move.b PLR1_SPCTAP,p1_spctap
  1303.  clr.b PLR1_SPCTAP
  1304.  move.b PLR1_Ducked,p1_ducked
  1305.  move.b PLR1_GunSelected,p1_gunselected
  1306.  
  1307.  move.l p1_xoff,d0
  1308.  jsr SENDFIRST
  1309.  move.l d0,p2_xoff
  1310.  
  1311.  move.l p1_zoff,d0
  1312.  jsr SENDFIRST
  1313.  move.l d0,p2_zoff 
  1314.  
  1315.  move.l p1_yoff,d0
  1316.  jsr SENDFIRST
  1317.  move.l d0,p2_yoff
  1318.   
  1319.  move.l p1_height,d0
  1320.  jsr SENDFIRST
  1321.  move.l d0,p2_height
  1322.  
  1323.  move.w p1_angpos,d0
  1324.  swap d0
  1325.  move.w p1_bobble,d0
  1326.  jsr SENDFIRST
  1327.  move.w d0,p2_bobble
  1328.  swap d0
  1329.  move.w d0,p2_angpos
  1330.  
  1331.  
  1332.  move.w TempFrames,d0
  1333.  swap d0
  1334.  move.b p1_spctap,d0
  1335.  lsl.w #8,d0
  1336.  move.b p1_clicked,d0
  1337.  jsr SENDFIRST
  1338.  move.b d0,p2_clicked
  1339.  lsr.w #8,d0
  1340.  move.b d0,p2_spctap
  1341.  
  1342.  
  1343.  move.w Rand1,d0
  1344.  swap d0
  1345.  move.b p1_ducked,d0
  1346.  lsl.w #8,d0
  1347.  move.b p1_gunselected,d0
  1348.  jsr SENDFIRST
  1349.  move.b d0,p2_gunselected
  1350.  lsr.w #8,d0
  1351.  move.b d0,p2_ducked
  1352.  
  1353.  move.b p1_fire,d0
  1354.  lsl.w #8,d0
  1355.  move.b MASTERQUITTING,d0
  1356.  or.b d0,SLAVEQUITTING
  1357.  swap d0
  1358.  move.b MASTERPAUSE,d0
  1359.  or.b d0,SLAVEPAUSE
  1360.  jsr SENDFIRST
  1361.  or.b d0,MASTERPAUSE
  1362.  or.b d0,SLAVEPAUSE
  1363.  swap d0
  1364.  or.b d0,SLAVEQUITTING
  1365.  or.b d0,MASTERQUITTING
  1366.  lsr.w #8,d0
  1367.  move.b d0,p2_fire
  1368.  
  1369.  bsr PLR1_Control
  1370.  bsr PLR2_Control
  1371.  move.l PLR1_Roompt,a0
  1372.  move.l ToZoneRoof(a0),SplitHeight
  1373.  move.w p1_xoff,THISPLRxoff
  1374.  move.w p1_zoff,THISPLRzoff
  1375.  
  1376.  bra donetalking
  1377.  
  1378. ASlaveShouldWaitOnHisMaster:
  1379.  
  1380.  move.l #KeyMap,a5
  1381.  tst.b $19(a5)
  1382.  sne SLAVEPAUSE
  1383.  
  1384.  
  1385.  move.w PLR2_energy,Energy
  1386.  
  1387.  jsr RECFIRST
  1388.  
  1389.  move.l PLR2s_xoff,p2_xoff
  1390.  move.l PLR2s_zoff,p2_zoff
  1391.  move.l PLR2s_yoff,p2_yoff
  1392.  move.l PLR2s_height,p2_height
  1393.  move.w PLR2s_angpos,p2_angpos
  1394.  move.w PLR2_bobble,p2_bobble
  1395.  move.b PLR2_clicked,p2_clicked
  1396.  clr.b PLR2_clicked
  1397.  move.b PLR2_fire,p2_fire
  1398.  move.b PLR2_SPCTAP,p2_spctap
  1399.  clr.b PLR2_SPCTAP
  1400.  move.b PLR2_Ducked,p2_ducked
  1401.  move.b PLR2_GunSelected,p2_gunselected
  1402.  
  1403.  move.l p2_xoff,d0
  1404.  jsr RECFIRST
  1405.  move.l d0,p1_xoff
  1406.  
  1407.  move.l p2_zoff,d0
  1408.  jsr RECFIRST
  1409.  move.l d0,p1_zoff
  1410.  
  1411.  move.l p2_yoff,d0
  1412.  jsr RECFIRST
  1413.  move.l d0,p1_yoff
  1414.  
  1415.  move.l p2_height,d0
  1416.  jsr RECFIRST
  1417.  move.l d0,p1_height
  1418.  
  1419.  move.w p2_angpos,d0
  1420.  swap d0
  1421.  move.w p2_bobble,d0
  1422.  jsr RECFIRST
  1423.  move.w d0,p1_bobble
  1424.  swap d0
  1425.  move.w d0,p1_angpos
  1426.  
  1427.  
  1428.  move.b p2_spctap,d0
  1429.  lsl.w #8,d0
  1430.  move.b p2_clicked,d0
  1431.  jsr RECFIRST
  1432.  move.b d0,p1_clicked
  1433.  lsr.w #8,d0
  1434.  move.b d0,p1_spctap
  1435.  swap d0
  1436.  move.w d0,TempFrames
  1437.  
  1438.  
  1439.  move.b p2_ducked,d0
  1440.  lsl.w #8,d0
  1441.  move.b p2_gunselected,d0
  1442.  jsr RECFIRST
  1443.  move.b d0,p1_gunselected
  1444.  lsr.w #8,d0
  1445.  move.b d0,p1_ducked
  1446.  swap d0
  1447.  move.w d0,Rand1
  1448.  
  1449.  move.b p2_fire,d0
  1450.  lsl.w #8,d0
  1451.  move.b SLAVEQUITTING,d0
  1452.  or.b d0,MASTERQUITTING
  1453.  swap d0
  1454.  move.b SLAVEPAUSE,d0
  1455.  or.b d0,MASTERPAUSE
  1456.  jsr RECFIRST
  1457.  or.b d0,MASTERPAUSE
  1458.  or.b d0,SLAVEPAUSE
  1459.  swap d0
  1460.  or.b d0,SLAVEQUITTING
  1461.  or.b d0,MASTERQUITTING
  1462.  lsr.w #8,d0
  1463.  move.b d0,p1_fire
  1464.  
  1465.  
  1466.  bsr PLR1_Control
  1467.  bsr PLR2_Control
  1468.  move.w p2_xoff,THISPLRxoff
  1469.  move.w p2_zoff,THISPLRzoff
  1470.  move.l PLR2_Roompt,a0
  1471.  move.l ToZoneRoof(a0),SplitHeight
  1472.  
  1473. donetalking:
  1474.  
  1475.  
  1476.  
  1477.  
  1478.  move.l #ZoneBrightTable,a1
  1479.  move.l ZoneAdds,a2
  1480.  move.l PLR2_ListOfGraphRooms,a0
  1481.  move.l PLR2_PointsToRotatePtr,a5
  1482.  cmp.b #'s',mors
  1483.  beq.s doallz
  1484.  move.l PLR1_ListOfGraphRooms,a0
  1485.  move.l PLR1_PointsToRotatePtr,a5
  1486.  
  1487. doallz
  1488.  move.w (a0),d0
  1489.  blt.s doneallz
  1490.  add.w #8,a0
  1491.  
  1492.  move.l (a2,d0.w*4),a3
  1493.  add.l LEVELDATA,a3
  1494.  move.w ToZoneBrightness(a3),d2
  1495.  
  1496.  blt.s justbright
  1497.  move.w d2,d3
  1498.  lsr.w #8,d3
  1499.  tst.b d3
  1500.  beq.s justbright
  1501.  
  1502.  move.l #BrightAnimTable,a4
  1503.  move.w -2(a4,d3.w*2),d2
  1504.  
  1505. justbright:
  1506.  move.w d2,(a1,d0.w*4)
  1507.  
  1508.  move.w ToUpperBrightness(a3),d2
  1509.  
  1510.  blt.s justbright2
  1511.  move.w d2,d3
  1512.  lsr.w #8,d3
  1513.  tst.b d3
  1514.  beq.s justbright2
  1515.  
  1516.  move.l #BrightAnimTable,a4
  1517.  move.w -2(a4,d3.w*2),d2
  1518.  
  1519. justbright2:
  1520.  move.w d2,2(a1,d0.w*4)
  1521.  
  1522.  bra doallz
  1523.  
  1524. doneallz:
  1525.  
  1526.  move.l PointBrights,a2
  1527.  move.l #CurrentPointBrights,a3
  1528. justtheone:
  1529.  move.w (a5)+,d0
  1530.  blt.s whythehell
  1531.  move.w (a2,d0.w*4),d2
  1532.  
  1533.  tst.b d2
  1534.  blt.s .justbright
  1535.  move.w d2,d3
  1536.  lsr.w #8,d3
  1537.  tst.b d3
  1538.  beq.s .justbright
  1539.  
  1540.  move.w d3,d4
  1541.  and.w #$f,d3
  1542.  lsr.w #4,d4
  1543.  add.w #1,d4
  1544.  
  1545.  move.l #BrightAnimTable,a0
  1546.  move.w -2(a0,d3.w*2),d3
  1547.  ext.w d2
  1548.  sub.w d2,d3
  1549.  muls d4,d3
  1550.  asr.w #4,d3
  1551.  add.w d3,d2
  1552.  
  1553. .justbright:
  1554.  ext.w d2
  1555.  
  1556.  move.w d2,(a3,d0.w*4)
  1557.  move.w 2(a2,d0.w*4),d2
  1558.  
  1559.  tst.b d2
  1560.  blt.s .justbright2
  1561.  move.w d2,d3
  1562.  lsr.w #8,d3
  1563.  tst.b d3
  1564.  beq.s .justbright2
  1565.  
  1566.  move.w d3,d4
  1567.  and.w #$f,d3
  1568.  lsr.w #4,d4
  1569.  add.w #1,d4
  1570.  
  1571.  move.l #BrightAnimTable,a0
  1572.  move.w -2(a0,d3.w*2),d3
  1573.  ext.w d2
  1574.  sub.w d2,d3
  1575.  muls d4,d3
  1576.  asr.w #4,d3
  1577.  add.w d3,d2
  1578.  
  1579. .justbright2:
  1580.  ext.w d2
  1581.  
  1582.  move.w d2,2(a3,d0.w*4)
  1583.  
  1584.  bra.s justtheone
  1585.  
  1586. whythehell:
  1587.  
  1588.  cmp.b #'n',mors
  1589.  beq nosee
  1590.  
  1591.  move.l PLR1_Roompt,FromRoom
  1592.  move.l PLR2_Roompt,ToRoom
  1593.  move.w p1_xoff,Viewerx
  1594.  move.w p1_zoff,Viewerz
  1595.  move.l p1_yoff,d0
  1596.  asr.l #7,d0
  1597.  move.w d0,Viewery
  1598.  move.w p2_xoff,Targetx
  1599.  move.w p2_zoff,Targetz
  1600.  move.l p2_yoff,d0
  1601.  asr.l #7,d0
  1602.  move.w d0,Targety
  1603.  move.b PLR1_StoodInTop,ViewerTop
  1604.  move.b PLR2_StoodInTop,TargetTop
  1605.  jsr CanItBeSeen
  1606.  
  1607.  move.l PLR1_Obj,a0
  1608.  move.b CanSee,d0
  1609.  and.b #2,d0
  1610.  move.b d0,17(a0)
  1611.  move.l PLR2_Obj,a0
  1612.  move.b CanSee,d0
  1613.  and.b #1,d0
  1614.  move.b d0,17(a0)
  1615.  
  1616. nosee:
  1617.  
  1618.  move.l PLR1_Obj,a0
  1619.  move.b #5,16(a0)
  1620.  move.l PLR2_Obj,a0
  1621.  move.b #11,16(a0)
  1622.  
  1623.  move.w TempFrames,d0
  1624.  add.w d0,p1_holddown
  1625.  cmp.w #30,p1_holddown
  1626.  blt.s oklength
  1627.  move.w #30,p1_holddown
  1628. oklength:
  1629.  
  1630.  tst.b p1_fire
  1631.  bne.s okstillheld
  1632.  sub.w d0,p1_holddown
  1633.  bge.s okstillheld
  1634.  move.w #0,p1_holddown
  1635.  
  1636. okstillheld:
  1637.  
  1638.  move.w TempFrames,d0
  1639.  add.w d0,p2_holddown
  1640.  
  1641.  cmp.w #30,p2_holddown
  1642.  blt.s oklength2
  1643.  move.w #30,p2_holddown
  1644. oklength2:
  1645.  
  1646.  
  1647.  tst.b p2_fire
  1648.  bne.s okstillheld2
  1649.  sub.w d0,p2_holddown
  1650.  bge.s okstillheld2
  1651.  move.w #0,p2_holddown
  1652. okstillheld2:
  1653.  
  1654. ; move.l #PLR1_GunData,a1
  1655. ; move.w p1_holddown,d0
  1656. ; move.w #50,10+32*3(a1)
  1657. ; move.l #PLR2_GunData,a1
  1658. ; move.w p2_holddown,d0
  1659. ; move.w #50,10+32*3(a1)
  1660.  
  1661.  
  1662. ******************************************
  1663. ******************************************
  1664.  
  1665.  move.w TempFrames,d1
  1666.  bgt.s noze
  1667.  moveq #1,d1
  1668. noze:
  1669.  
  1670.  move.w PLR1_xoff,d0
  1671.  sub.w OLDX1,d0
  1672.  asl.w #4,d0
  1673.  ext.l d0
  1674.  divs d1,d0
  1675.  move.w d0,XDIFF1
  1676.  move.w PLR2_xoff,d0
  1677.  sub.w OLDX2,d0
  1678.  asl.w #4,d0
  1679.  ext.l d0
  1680.  divs d1,d0
  1681.  move.w d0,XDIFF2
  1682.  move.w PLR1_zoff,d0
  1683.  sub.w OLDZ1,d0
  1684.  asl.w #4,d0
  1685.  ext.l d0
  1686.  divs d1,d0
  1687.  move.w d0,ZDIFF1
  1688.  move.w PLR2_zoff,d0
  1689.  sub.w OLDZ2,d0
  1690.  asl.w #4,d0
  1691.  ext.l d0
  1692.  divs d1,d0
  1693.  move.w d0,ZDIFF2
  1694.  
  1695.  cmp.b #'s',mors
  1696.  beq.s ImPlayer2OhYesIAm
  1697.  bsr USEPLR1
  1698.  bra IWasPlayer1
  1699.  
  1700. ImPlayer2OhYesIAm:
  1701.  bsr USEPLR2
  1702. IWasPlayer1:
  1703.  
  1704.  
  1705.  cmp.b #'s',mors
  1706.  beq drawplayer2
  1707.  
  1708.  move.w #0,scaleval
  1709.  
  1710.  move.l PLR1_xoff,xoff
  1711.  move.l PLR1_yoff,yoff
  1712.  move.l PLR1_zoff,zoff
  1713.  move.w PLR1_angpos,angpos
  1714.  move.w PLR1_cosval,cosval
  1715.  move.w PLR1_sinval,sinval
  1716.  
  1717.  
  1718.  move.l PLR1_ListOfGraphRooms,ListOfGraphRooms
  1719.  move.l PLR1_PointsToRotatePtr,PointsToRotatePtr
  1720.  move.l PLR1_Roompt,Roompt
  1721.  
  1722.  bsr OrderZones
  1723.  jsr objmoveanim
  1724.  bsr EnergyBar
  1725.  bsr AmmoBar
  1726.  
  1727.  move.w #0,leftclip
  1728.  move.w #96,rightclip
  1729.  move.w #0,deftopclip
  1730.  
  1731.  move.w #79,defbotclip
  1732.  move.w #0,topclip
  1733.  move.w #79,botclip
  1734. ; sub.l #10*104*4,frompt
  1735. ; sub.l #10*104*4,midpt
  1736.  
  1737. * Subroom loop
  1738.  
  1739.  
  1740.  bsr DrawDisplay 
  1741.  
  1742.  bra nodrawp2
  1743.  
  1744. drawplayer2
  1745.  
  1746.  move.w #0,scaleval
  1747.  move.l PLR2_xoff,xoff
  1748.  move.l PLR2_yoff,yoff
  1749.  move.l PLR2_zoff,zoff
  1750.  move.w PLR2_angpos,angpos
  1751.  move.w PLR2_cosval,cosval
  1752.  move.w PLR2_sinval,sinval 
  1753.  
  1754.  
  1755.  
  1756.  move.l PLR2_ListOfGraphRooms,ListOfGraphRooms
  1757.  move.l PLR2_PointsToRotatePtr,PointsToRotatePtr
  1758.  move.l PLR2_Roompt,Roompt
  1759.  
  1760.  bsr OrderZones
  1761.  jsr objmoveanim
  1762.  bsr EnergyBar
  1763.  bsr AmmoBar
  1764.  
  1765.  move.w #0,leftclip
  1766.  move.w #96,rightclip
  1767.  move.w #0,deftopclip
  1768.  move.w #79,defbotclip
  1769.  move.w #0,topclip
  1770.  move.w #79,botclip
  1771.  
  1772.  bsr DrawDisplay
  1773.  
  1774. nodrawp2:
  1775.  
  1776. ***************************************** 
  1777. * Copy from copbuff to chip ram
  1778.  
  1779.  
  1780. ; move.l drawpt,a3
  1781. ; adda.w #10,a3
  1782. ; move.l COPSCRNBUFF,a2
  1783. ; move.w #2,d6
  1784. ; adda.w #10,a2
  1785. ;COPYOUT
  1786. ; move.w #31,d0
  1787. ;COPYDOWN1:
  1788. ; move.w #3,d1
  1789. ; move.l a2,a4
  1790. ; move.l a3,a5
  1791. ;.inlop1:
  1792. ;val SET 0
  1793. ; REPT 20
  1794. ; move.w val(a4),val(a5)
  1795. ;val SET val+104*4
  1796. ; ENDR
  1797. ; adda.l #104*4*20,a4
  1798. ; adda.l #104*4*20,a5
  1799. ; dbra d1,.inlop1
  1800. ; addq #4,a2
  1801. ; addq #4,a3
  1802. ; dbra d0,COPYDOWN1
  1803. ; addq #4,a2
  1804. ; addq #4,a3
  1805. ; dbra d6,COPYOUT 
  1806.  
  1807.  
  1808. ***************************************** 
  1809.  move.l PLR2_Roompt,a0
  1810.  move.l #WorkSpace,a1
  1811.  clr.l (a1)
  1812.  clr.l 4(a1)
  1813.  clr.l 8(a1)
  1814.  clr.l 12(a1)
  1815.  clr.l 16(a1)
  1816.  clr.l 20(a1)
  1817.  clr.l 24(a1)
  1818.  clr.l 28(a1)
  1819.  
  1820.  cmp.b #'n',mors
  1821.  beq.s plr1only
  1822.  
  1823.  lea ToListOfGraph(a0),a0
  1824. .doallrooms:
  1825.  move.w (a0),d0
  1826.  blt.s .allroomsdone
  1827.  addq #8,a0
  1828.  move.w d0,d1
  1829.  asr.w #3,d0
  1830.  bset d1,(a1,d0.w)
  1831.  bra .doallrooms
  1832. .allroomsdone:
  1833.  
  1834. plr1only:
  1835.  
  1836.  move.l PLR1_Roompt,a0
  1837.  lea ToListOfGraph(a0),a0
  1838. .doallrooms2:
  1839.  move.w (a0),d0
  1840.  blt.s .allroomsdone2
  1841.  addq #8,a0
  1842.  move.w d0,d1
  1843.  asr.w #3,d0
  1844.  bset d1,(a1,d0.w)
  1845.  bra .doallrooms2
  1846. .allroomsdone2:
  1847.  
  1848.  move.l ObjectData,a0
  1849.  sub.w #64,a0
  1850. .doallobs:
  1851.  add.w #64,a0
  1852.  move.w (a0),d0
  1853.  blt.s .allobsdone
  1854.  move.w 12(a0),d0
  1855.  blt.s .doallobs
  1856.  move.w d0,d1
  1857.  asr.w #3,d0
  1858.  btst d1,(a1,d0.w)
  1859.  beq.s .doallobs
  1860.  or.b #127,worry(a0)
  1861.  bra.s .doallobs
  1862. .allobsdone:
  1863.  
  1864.  
  1865.  
  1866. ; move.l #brightentab,a0
  1867. ; move.l frompt,a3
  1868. ; adda.w #(4*33)+(104*4*20),a3
  1869. ; move.w #20,d7
  1870. ; move.w #20,d6
  1871. ;horl:
  1872. ; move.w d6,d5
  1873. ; move.l a3,a1
  1874. ;vertl
  1875. ; move.w (a1),d0
  1876. ; move.w (a0,d0.w*2),(a1)
  1877. ; addq #4,a1
  1878. ; dbra d5,vertl
  1879. ; adda.w #104*4,a3
  1880. ; dbra d7,horl
  1881.  
  1882.  move.l #$dff000,a6
  1883.  
  1884. ; move.w #$300,col0(a6)
  1885.  
  1886.  move.l #KeyMap,a5
  1887.  tst.b $45(a5)
  1888.  beq.s noend
  1889.  
  1890.  cmp.b #'s',mors
  1891.  beq plr2quit 
  1892.  
  1893.  st MASTERQUITTING
  1894.  bra noend
  1895.  
  1896. plr2quit:
  1897.  st SLAVEQUITTING
  1898. noend:
  1899.  
  1900.  tst.b MASTERQUITTING
  1901.  beq.s .noquit
  1902.  tst.b SLAVEQUITTING
  1903.  bne endnomusic
  1904. .noquit
  1905.  
  1906.  cmp.b #'n',mors
  1907.  bne.s .noexit
  1908.  move.l PLR1_Roompt,a0
  1909.  move.w (a0),d0
  1910.  move.w PLOPT,d1
  1911.  move.l #ENDZONES,a0
  1912.  cmp.w (a0,d1.w*2),d0
  1913.  beq end
  1914. .noexit:
  1915.  
  1916.  tst.w PLR1_energy
  1917.  ble end
  1918.  tst.w PLR2_energy
  1919.  ble end
  1920.  
  1921. ; move.l SwitchData,a0
  1922. ; tst.b 24+8(a0)
  1923. ; bne end
  1924.   
  1925.  JSR STOPTIMER
  1926.  
  1927.  bra lop
  1928.  
  1929. MASTERQUITTING: dc.b 0
  1930. SLAVEQUITTING: dc.b 0
  1931. MASTERPAUSE: dc.b 0
  1932. SLAVEPAUSE: dc.b 0
  1933.  
  1934. PAUSEOPTS:
  1935.  include "ab3:source/pauseopts"
  1936.  
  1937. ENDZONES:
  1938. ; LEVEL 1
  1939.  dc.w 132
  1940. ; LEVEL 2
  1941.  dc.w 149
  1942. ; LEVEL 3
  1943.  dc.w 155
  1944. ; LEVEL 4
  1945.  dc.w 107
  1946. ; LEVEL 5
  1947.  dc.w 67
  1948. ; LEVEL 6
  1949.  dc.w 132
  1950. ; LEVEL 7
  1951.  dc.w 203
  1952. ; LEVEL 8
  1953.  dc.w 166
  1954. ; LEVEL 9
  1955.  dc.w 118
  1956. ; LEVEL 10
  1957.  dc.w 102
  1958. ; LEVEL 11
  1959.  dc.w 103
  1960. ; LEVEL 12
  1961.  dc.w 2
  1962. ; LEVEL 13
  1963.  dc.w 98
  1964. ; LEVEL 14
  1965.  dc.w 0
  1966. ; LEVEL 15
  1967.  dc.w 148
  1968. ; LEVEL 16
  1969.  dc.w 103
  1970.  
  1971. ***************************************************************************
  1972. ***************************************************************************
  1973. ****************** End of Main Loop here ********************************** 
  1974. ***************************************************************************
  1975. ***************************************************************************
  1976.  
  1977. putinsmallscr:
  1978.  move.l #$1fe0000,statskip
  1979.  move.l #$1fe0000,statskip+4
  1980.  
  1981.  move.l #healthpal,a5
  1982.  move.l COPSCRN1,a0
  1983.  move.l COPSCRN2,a2
  1984.  move.w #scrheight-1,d0
  1985.  move.l #0,d6
  1986.  move.w #0,d3
  1987.  move.w #$2bdf,startwait
  1988.  move.w #$2d01,endwait
  1989. .fillcop
  1990.  move.w #$180,d1
  1991.  
  1992.  move.l a0,a1
  1993.  move.l a2,a3
  1994.  move.w #$10c,(a1)+
  1995.  move.w #$10c,(a3)+
  1996.  move.w d3,(a1)+
  1997.  move.w d3,(a3)+
  1998.  eor.w #$8000,d3
  1999.  
  2000.  move.w #$106,(a1)+
  2001.  move.w #$106,(a3)+
  2002.  move.w #$2c42,d5
  2003.  or.w d3,d5
  2004.  and.w #$fffe,d5
  2005.  move.w d5,(a1)+
  2006.  move.w d5,(a3)+
  2007.  bsr do32
  2008.  
  2009.  move.w #$106,(a1)+
  2010.  move.w #$106,(a3)+
  2011.  move.w #$4c42,d5
  2012.  or.w d3,d5
  2013.  and.w #$fffe,d5
  2014.  move.w d5,(a1)+
  2015.  move.w d5,(a3)+
  2016.  bsr do32
  2017.  
  2018.  move.w #$106,(a1)+
  2019.  move.w #$106,(a3)+
  2020.  move.w #$6c42,d5
  2021.  or.w d3,d5
  2022.  and.w #$fffe,d5
  2023.  move.w d5,(a1)+
  2024.  move.w d5,(a3)+
  2025.  bsr do32
  2026.  
  2027.  
  2028.  move.l #$1060c42,(a1)+
  2029.  move.l #$1060c42,(a3)+
  2030.  move.w #$19e,(a1)+
  2031.  move.w (a5),(a1)+
  2032.  move.w #$19e,(a3)+
  2033.  move.w (a5)+,(a3)+
  2034.  
  2035. **********************************
  2036.  
  2037.  adda.w #104*4,a0
  2038.  adda.w #104*4,a2
  2039.  dbra d0,.fillcop
  2040.  
  2041.  move.w #$48,fetchstart
  2042.  move.w #$88,fetchstop
  2043.  move.w #$2cb1,winstart
  2044.  move.w #$2c91,winstop
  2045.  move.w #-24,modulo
  2046.  move.w #-24,modulo+4
  2047.  
  2048.  move.l #nullspr,d0
  2049.  move.w d0,s4l
  2050.  move.w d0,s5l
  2051.  move.w d0,s6l
  2052.  move.w d0,s7l
  2053.  swap d0
  2054.  move.w d0,s4h
  2055.  move.w d0,s5h
  2056.  move.w d0,s6h
  2057.  move.w d0,s7h 
  2058.  
  2059.  move.l #borders,d0
  2060.  move.w d0,s0l
  2061.  swap d0
  2062.  move.w d0,s0h
  2063.  move.l #borders+2592,d0
  2064.  move.w d0,s1l
  2065.  swap d0
  2066.  move.w d0,s1h
  2067.  move.l #borders+2592*2,d0
  2068.  move.w d0,s2l
  2069.  swap d0
  2070.  move.w d0,s2h
  2071.  move.l #borders+2592*3,d0
  2072.  move.w d0,s3l
  2073.  swap d0
  2074.  move.w d0,s3h
  2075.  
  2076.  
  2077.  move.l #scrn+40,a0
  2078.  move.l #scrn+160,a1
  2079.  move.l #scrn+280,a2
  2080.  move.l #smallscrntab,a3
  2081.  move.w #191,d7    ; counter
  2082.  move.w #0,d1    ; xpos
  2083. .plotscrnloop:
  2084.  move.b (a3)+,d0
  2085.  move.w d1,d2
  2086.  asr.w #3,d2
  2087.  move.b d1,d3
  2088.  not.b d3
  2089.  bclr.b d3,-40(a0,d2.w)
  2090.  bclr.b d3,(a0,d2.w)
  2091.  bclr.b d3,40(a0,d2.w)
  2092.  bclr.b d3,-40(a1,d2.w)
  2093.  bclr.b d3,(a1,d2.w)
  2094.  bclr.b d3,40(a1,d2.w)
  2095.  bclr.b d3,-40(a2,d2.w)
  2096.  btst #0,d0
  2097.  beq.s .nobp1
  2098.  bset.b d3,-40(a0,d2.w)
  2099. .nobp1:
  2100.  btst #1,d0
  2101.  beq.s .nobp2
  2102.  bset.b d3,(a0,d2.w)
  2103. .nobp2:
  2104.  btst #2,d0
  2105.  beq.s .nobp3
  2106.  bset.b d3,40(a0,d2.w)
  2107. .nobp3:
  2108.  btst #3,d0
  2109.  beq.s .nobp4
  2110.  bset.b d3,-40(a1,d2.w)
  2111. .nobp4:
  2112.  btst #4,d0
  2113.  beq.s .nobp5
  2114.  bset.b d3,(a1,d2.w)
  2115. .nobp5:
  2116.  btst #5,d0
  2117.  beq.s .nobp6
  2118.  bset.b d3,40(a1,d2.w)
  2119. .nobp6:
  2120.  btst #6,d0
  2121.  beq.s .nobp7
  2122.  bset.b d3,-40(a2,d2.w)
  2123. .nobp7:
  2124.  
  2125.  addq #1,d1
  2126.  
  2127.  dbra d7,.plotscrnloop
  2128.  
  2129.  
  2130.  rts
  2131.  
  2132. putinlargescr:
  2133.  
  2134.  move.l #$1000000,statskip
  2135.  move.l #$fffffffe,statskip+4
  2136.  
  2137.  move.l #healthpal,a5
  2138.  move.l COPSCRN1,a0
  2139.  move.l COPSCRN2,a2
  2140.  move.w #scrheight-1,d0
  2141.  move.l #0,d6
  2142.  move.w #0,d3
  2143.  move.w #$29df,startwait
  2144.  move.w #$2b01,endwait
  2145. .fillcop
  2146.  move.w #$180,d1
  2147.  
  2148.  move.l a0,a1
  2149.  move.l a2,a3
  2150.  move.w #$10c,(a1)+
  2151.  move.w #$10c,(a3)+
  2152.  move.w d3,(a1)+
  2153.  move.w d3,(a3)+
  2154.  eor.w #$8000,d3
  2155.  
  2156.  move.w #$106,(a1)+
  2157.  move.w #$106,(a3)+
  2158.  move.w #$2c42,d5
  2159.  or.w d3,d5
  2160.  and.w #$fffe,d5
  2161.  move.w d5,(a1)+
  2162.  move.w d5,(a3)+
  2163.  bsr do32
  2164.  
  2165.  move.w #$106,(a1)+
  2166.  move.w #$106,(a3)+
  2167.  move.w #$4c42,d5
  2168.  or.w d3,d5
  2169.  and.w #$fffe,d5
  2170.  move.w d5,(a1)+
  2171.  move.w d5,(a3)+
  2172.  bsr do32
  2173.  
  2174.  move.w #$106,(a1)+
  2175.  move.w #$106,(a3)+
  2176.  move.w #$6c42,d5
  2177.  or.w d3,d5
  2178.  and.w #$fffe,d5
  2179.  move.w d5,(a1)+
  2180.  move.w d5,(a3)+
  2181.  bsr do32
  2182.  
  2183.  move.w startwait,(a1)+
  2184.  move.w #$fffe,(a1)+
  2185.  move.w endwait,(a1)+
  2186.  move.w #$ff00,(a1)+
  2187.  move.w startwait,(a3)+
  2188.  move.w #$fffe,(a3)+
  2189.  move.w endwait,(a3)+
  2190.  move.w #$ff00,(a3)+
  2191.  
  2192. ; move.l $1fe0000,(a1)+
  2193. ; move.l $1fe0000,(a3)+
  2194. ; move.l $1fe0000,(a1)+
  2195. ; move.l $1fe0000,(a3)+
  2196.  
  2197.  
  2198.  add.w #$300,startwait
  2199.  add.w #$300,endwait
  2200.  
  2201. ; move.l #$1060c42,(a1)+
  2202. ; move.l #$1060c42,(a3)+
  2203. ; move.w #$19e,(a1)+
  2204. ; move.w (a5),(a1)+
  2205. ; move.w #$19e,(a3)+
  2206. ; move.w (a5)+,(a3)+
  2207.  
  2208. **********************************
  2209.  
  2210.  adda.w #104*4,a0
  2211.  adda.w #104*4,a2
  2212.  dbra d0,.fillcop
  2213.  
  2214.  move.w #$38,fetchstart
  2215.  move.w #$b8,fetchstop
  2216.  move.w #$2c81,winstart
  2217.  move.w #$2cc1,winstop
  2218.  move.w #-40,modulo
  2219.  move.w #-40,modulo+4
  2220.  
  2221.  move.l #nullspr,d0
  2222.  move.w d0,s0l
  2223.  move.w d0,s1l
  2224.  move.w d0,s2l
  2225.  move.w d0,s3l
  2226.  move.w d0,s4l
  2227.  move.w d0,s5l
  2228.  move.w d0,s6l
  2229.  move.w d0,s7l
  2230.  swap d0
  2231.  move.w d0,s0h
  2232.  move.w d0,s1h
  2233.  move.w d0,s2h
  2234.  move.w d0,s3h
  2235.  move.w d0,s4h
  2236.  move.w d0,s5h
  2237.  move.w d0,s6h
  2238.  move.w d0,s7h 
  2239.  
  2240.  move.l #scrn+40,a0
  2241.  move.l #scrn+160,a1
  2242.  move.l #scrn+280,a2
  2243.  move.l #scrntab,a3
  2244.  move.w #319,d7    ; counter
  2245.  move.w #0,d1    ; xpos
  2246. .plotscrnloop:
  2247.  move.b (a3)+,d0
  2248.  move.w d1,d2
  2249.  asr.w #3,d2
  2250.  move.b d1,d3
  2251.  not.b d3
  2252.  bclr.b d3,-40(a0,d2.w)
  2253.  bclr.b d3,(a0,d2.w)
  2254.  bclr.b d3,40(a0,d2.w)
  2255.  bclr.b d3,-40(a1,d2.w)
  2256.  bclr.b d3,(a1,d2.w)
  2257.  bclr.b d3,40(a1,d2.w)
  2258.  bclr.b d3,-40(a2,d2.w)
  2259.  btst #0,d0
  2260.  beq.s .nobp1
  2261.  bset.b d3,-40(a0,d2.w)
  2262. .nobp1:
  2263.  btst #1,d0
  2264.  beq.s .nobp2
  2265.  bset.b d3,(a0,d2.w)
  2266. .nobp2:
  2267.  btst #2,d0
  2268.  beq.s .nobp3
  2269.  bset.b d3,40(a0,d2.w)
  2270. .nobp3:
  2271.  btst #3,d0
  2272.  beq.s .nobp4
  2273.  bset.b d3,-40(a1,d2.w)
  2274. .nobp4:
  2275.  btst #4,d0
  2276.  beq.s .nobp5
  2277.  bset.b d3,(a1,d2.w)
  2278. .nobp5:
  2279.  btst #5,d0
  2280.  beq.s .nobp6
  2281.  bset.b d3,40(a1,d2.w)
  2282. .nobp6:
  2283.  btst #6,d0
  2284.  beq.s .nobp7
  2285.  bset.b d3,-40(a2,d2.w)
  2286. .nobp7:
  2287.  
  2288.  addq #1,d1
  2289.  
  2290.  dbra d7,.plotscrnloop
  2291.  
  2292.  rts
  2293.  
  2294. CLEARKEYBOARD:
  2295.  move.l #KeyMap,a5
  2296.  moveq #0,d0
  2297.  move.w #15,d1
  2298. clrloo:
  2299.  move.l d0,(a5)+
  2300.  move.l d0,(a5)+
  2301.  move.l d0,(a5)+
  2302.  move.l d0,(a5)+
  2303.  dbra d1,clrloo
  2304.  rts
  2305.  
  2306. READCONTROLS: dc.w 0
  2307.  
  2308. tstststst: dc.w 0
  2309.  
  2310. BollocksRoom:
  2311.  dc.w -1
  2312.  ds.l 50
  2313.  
  2314. GUNYOFFS:
  2315.  dc.w 20
  2316.  dc.w 20
  2317.  dc.w 0
  2318.  dc.w 20
  2319.  dc.w 20
  2320.  dc.w 0
  2321.  dc.w 0
  2322.  dc.w 20
  2323.  
  2324. USEPLR1:
  2325.  
  2326. ***********************************
  2327.  
  2328.  move.l PLR1_Obj,a0 
  2329.  move.l ObjectPoints,a1
  2330.  move.l #ObjRotated,a2
  2331.  move.w (a0),d0
  2332.  move.l PLR1_xoff,(a1,d0.w*8)
  2333.  move.l PLR1_zoff,4(a1,d0.w*8)
  2334.  move.l PLR1_Roompt,a1
  2335.  
  2336.  moveq #0,d2
  2337.  move.b damagetaken(a0),d2
  2338.  beq .notbeenshot
  2339.  move.w #$f00,hitcol
  2340.  move.w #$f00,hitcol2
  2341.  sub.w d2,PLR1_energy
  2342.  movem.l d0-d7/a0-a6,-(a7)
  2343.  move.b #$fb,IDNUM
  2344.  move.w #19,Samplenum
  2345.  clr.b notifplaying
  2346.  move.w #0,Noisex
  2347.  move.w #0,Noisez
  2348.  move.w #100,Noisevol
  2349.  jsr MakeSomeNoise
  2350.  
  2351.  movem.l (a7)+,d0-d7/a0-a6
  2352.  
  2353. .notbeenshot
  2354.  move.b #0,damagetaken(a0)
  2355.  move.b PLR1_energy+1,numlives(a0)
  2356.  
  2357.  move.b PLR1_StoodInTop,ObjInTop(a0)
  2358.  
  2359.  move.w (a1),12(a0)
  2360.  move.w (a1),d2
  2361.  move.l #ZoneBrightTable,a1
  2362.  move.l (a1,d2.w*4),d2
  2363.  tst.b PLR1_StoodInTop
  2364.  bne.s .okinbott
  2365.  swap d2
  2366. .okinbott:
  2367.  
  2368.  move.w d2,2(a0)
  2369.  
  2370.  move.l PLR1_yoff,d0
  2371.  move.l p1_height,d1
  2372.  asr.l #1,d1
  2373.  add.l d1,d0
  2374.  asr.l #7,d0
  2375.  move.w d0,4(a0)
  2376.  
  2377. ***********************************
  2378.  
  2379.  move.l PLR2_Obj,a0 
  2380.  
  2381.  move.w PLR2_angpos,d0
  2382.  and.w #8190,d0
  2383.  move.w d0,Facing(a0)
  2384.  
  2385.  jsr ViewpointToDraw
  2386.  asl.w #2,d0
  2387.  moveq #0,d1
  2388.  move.b p2_bobble,d1
  2389.  not.b d1
  2390.  lsr.b #3,d1
  2391.  and.b #$3,d1
  2392.  add.w d1,d0
  2393.  move.w d0,10(a0)
  2394.  move.w #10,8(a0)
  2395.  
  2396.  move.l ObjectPoints,a1
  2397.  move.l #ObjRotated,a2
  2398.  move.w (a0),d0
  2399.  move.l PLR2_xoff,(a1,d0.w*8)
  2400.  move.l PLR2_zoff,4(a1,d0.w*8)
  2401.  move.l PLR2_Roompt,a1
  2402.  
  2403.  moveq #0,d2
  2404.  move.b damagetaken(a0),d2
  2405.  beq .notbeenshot2
  2406.  sub.w d2,PLR2_energy
  2407. .notbeenshot2
  2408.  move.b #0,damagetaken(a0)
  2409.  move.b PLR2_energy+1,numlives(a0)
  2410.  
  2411.  move.b PLR2_StoodInTop,ObjInTop(a0)
  2412.  
  2413.  move.w (a1),12(a0)
  2414.  move.w (a1),d2
  2415.  move.l #ZoneBrightTable,a1
  2416.  move.l (a1,d2.w*4),d2
  2417.  tst.b PLR2_StoodInTop
  2418.  bne.s .okinbott2
  2419.  swap d2
  2420. .okinbott2:
  2421.  
  2422.  move.w d2,2(a0)
  2423.  
  2424.  move.l PLR2_yoff,d0
  2425.  move.l p2_height,d1
  2426.  asr.l #1,d1
  2427.  add.l d1,d0
  2428.  asr.l #7,d0
  2429.  move.w d0,4(a0)
  2430.  
  2431. **********************************
  2432.  
  2433.  
  2434.  move.l PLR1_Obj,a0
  2435.  move.w #-1,12+128(a0)
  2436.  
  2437.  rts
  2438.  
  2439. DRAWINGUN:
  2440.  move.l #Objects+9*16,a0
  2441.  move.l 4(a0),a5    ; ptr
  2442.  move.l 8(a0),a2    ; frames
  2443.  move.l 12(a0),a4    ; pal
  2444.  move.l (a0),a0        ; wad
  2445.  
  2446.  move.l #GunAnims,a1
  2447.  move.l (a1,d0.w*8),a1
  2448.  move.w (a1,d1.w*2),d5    ; frame of anim
  2449.  
  2450.  move.l #GUNYOFFS,a1
  2451.  move.w (a1,d0.w*2),d7    ; yoff
  2452.  move.l frompt,a6
  2453.  move.w d7,d6
  2454.  muls #104*4,d6
  2455.  add.l d6,a6    ; screen pointer
  2456.  
  2457.  asl.w #2,d0
  2458.  add.w d5,d0    ; frame
  2459.  move.w (a2,d0.w*4),d1    ; xoff
  2460.  
  2461.  lea (a5,d1.w),a5    ; right ptr
  2462.  
  2463.  move.w #31,d0
  2464.  bsr DRAWCHUNK
  2465.  addq.w #4,a6
  2466.  move.w #31,d0
  2467.  bsr DRAWCHUNK
  2468.  addq.w #4,a6
  2469.  move.w #31,d0
  2470.  bsr DRAWCHUNK
  2471.  rts
  2472.  
  2473.  
  2474. DRAWCHUNK:
  2475.  move.w #78,d3
  2476.  sub.w d7,d3
  2477.  move.l a6,a3
  2478.  move.b (a5),d2
  2479.  move.l (a5)+,d1
  2480.  bne.s .noblank
  2481.  addq #4,a6
  2482.  dbra d0,DRAWCHUNK 
  2483.  rts
  2484.  
  2485. .noblank:
  2486.  and.l #$ffffff,d1
  2487.  lea (a0,d1.l),a1
  2488.  cmp.b #1,d2
  2489.  bgt.s thirdd
  2490.  beq.s secc
  2491. .drawdown:
  2492.  move.w (a1)+,d2
  2493.  and.w #%11111,d2
  2494.  beq.s .itsblank
  2495.  move.w (a4,d2.w*2),(a3)
  2496. .itsblank
  2497.  add.w #104*4,a3
  2498.  dbra d3,.drawdown
  2499.  
  2500.  addq #4,a6
  2501.  dbra d0,DRAWCHUNK
  2502.  rts
  2503.  
  2504. secc:
  2505. .drawdown:
  2506.  move.w (a1)+,d2
  2507.  lsr.w #5,d2
  2508.  and.w #%11111,d2
  2509.  beq.s .itsblank
  2510.  move.w (a4,d2.w*2),(a3)
  2511. .itsblank
  2512.  add.w #104*4,a3
  2513.  dbra d3,.drawdown
  2514.  
  2515.  addq #4,a6
  2516.  dbra d0,DRAWCHUNK
  2517.  rts
  2518.  
  2519. thirdd:
  2520. .drawdown:
  2521.  move.b (a1),d2
  2522.  addq #2,a1
  2523.  lsr.b #2,d2
  2524.  and.w #%11111,d2
  2525.  beq.s .itsblank
  2526.  move.w (a4,d2.w*2),(a3)
  2527. .itsblank
  2528.  add.w #104*4,a3
  2529.  dbra d3,.drawdown
  2530.  
  2531.  addq #4,a6
  2532.  dbra d0,DRAWCHUNK
  2533.  rts
  2534.  
  2535.  
  2536.  
  2537. ***************************************************
  2538. **************************************************
  2539.  
  2540. USEPLR2:
  2541.  
  2542. ***********************************
  2543.  
  2544.  move.l PLR2_Obj,a0 
  2545.  move.l ObjectPoints,a1
  2546.  move.l #ObjRotated,a2
  2547.  move.w (a0),d0
  2548.  move.l PLR2_xoff,(a1,d0.w*8)
  2549.  move.l PLR2_zoff,4(a1,d0.w*8)
  2550.  move.l PLR2_Roompt,a1
  2551.  
  2552.  moveq #0,d2
  2553.  move.b damagetaken(a0),d2
  2554.  beq .notbeenshot
  2555.  move.w #$f00,hitcol
  2556.  move.w #$f00,hitcol2
  2557.  sub.w d2,PLR2_energy
  2558.  movem.l d0-d7/a0-a6,-(a7)
  2559.  move.w #19,Samplenum
  2560.  clr.b notifplaying
  2561.  move.b #$fb,IDNUM
  2562.  move.w #0,Noisex
  2563.  move.w #0,Noisez
  2564.  move.w #100,Noisevol
  2565.  jsr MakeSomeNoise
  2566.  
  2567.  movem.l (a7)+,d0-d7/a0-a6
  2568.  
  2569. .notbeenshot
  2570.  move.b #0,damagetaken(a0)
  2571.  move.b PLR2_energy+1,numlives(a0)
  2572.  
  2573.  move.b PLR2_StoodInTop,ObjInTop(a0)
  2574.  
  2575.  move.w (a1),12(a0)
  2576.  move.w (a1),d2
  2577.  move.l #ZoneBrightTable,a1
  2578.  move.l (a1,d2.w*4),d2
  2579.  tst.b PLR2_StoodInTop
  2580.  bne.s .okinbott
  2581.  swap d2
  2582. .okinbott:
  2583.  
  2584.  move.w d2,2(a0)
  2585.  
  2586.  move.l PLR2_yoff,d0
  2587.  move.l p2_height,d1
  2588.  asr.l #1,d1
  2589.  add.l d1,d0
  2590.  asr.l #7,d0
  2591.  move.w d0,4(a0)
  2592.  
  2593. ***********************************
  2594.  
  2595.  move.l PLR1_Obj,a0 
  2596.  
  2597.  move.w PLR1_angpos,d0
  2598.  and.w #8190,d0
  2599.  move.w d0,Facing(a0)
  2600.  
  2601.  jsr ViewpointToDraw
  2602.  asl.w #2,d0
  2603.  moveq #0,d1
  2604.  move.b p1_bobble,d1
  2605.  not.b d1
  2606.  lsr.b #3,d1
  2607.  and.b #$3,d1
  2608.  add.w d1,d0
  2609.  move.w d0,10(a0)
  2610.  move.w #10,8(a0)
  2611.  
  2612.  move.l ObjectPoints,a1
  2613.  move.l #ObjRotated,a2
  2614.  move.w (a0),d0
  2615.  move.l PLR1_xoff,(a1,d0.w*8)
  2616.  move.l PLR1_zoff,4(a1,d0.w*8)
  2617.  move.l PLR1_Roompt,a1
  2618.  
  2619.  moveq #0,d2
  2620.  move.b damagetaken(a0),d2
  2621.  beq .notbeenshot2
  2622.  sub.w d2,PLR1_energy
  2623. .notbeenshot2
  2624.  move.b #0,damagetaken(a0)
  2625.  move.b PLR1_energy+1,numlives(a0)
  2626.  
  2627.  move.b PLR1_StoodInTop,ObjInTop(a0)
  2628.  
  2629.  move.w (a1),12(a0)
  2630.  move.w (a1),d2
  2631.  move.l #ZoneBrightTable,a1
  2632.  move.l (a1,d2.w*4),d2
  2633.  tst.b PLR1_StoodInTop
  2634.  bne.s .okinbott2
  2635.  swap d2
  2636. .okinbott2:
  2637.  
  2638.  move.w d2,2(a0)
  2639.  
  2640.  move.l PLR1_yoff,d0
  2641.  move.l p1_height,d1
  2642.  asr.l #1,d1
  2643.  add.l d1,d0
  2644.  asr.l #7,d0
  2645.  move.w d0,4(a0)
  2646.  
  2647. **********************************
  2648.  
  2649.  move.l PLR2_Obj,a0
  2650.  move.w #-1,12+64(a0)
  2651.  
  2652.  rts
  2653.  
  2654.  
  2655. GunSelected: dc.b 0
  2656.  even
  2657.  
  2658. GunAnims:
  2659.  dc.l MachineAnim,3
  2660.  dc.l PlasmaAnim,5
  2661.  dc.l RocketAnim,5
  2662.  dc.l FlameThrowerAnim,5
  2663.  dc.l GrenadeAnim,12
  2664.  dc.l 0,0
  2665.  dc.l 0,0
  2666.  dc.l ShotGunAnim,12+19+11+20+1
  2667.  
  2668. MachineAnim:
  2669.  dc.w 0,1,2,3
  2670. PlasmaAnim:
  2671.  dc.w 0,1,2,3,3,3
  2672. RocketAnim:
  2673.  dc.w 0,1,2,3,3,3
  2674. FlameThrowerAnim:
  2675.  dc.w 0,1,2,3,3,3
  2676. GrenadeAnim:
  2677.  dc.w 0,1,1,1,1
  2678.  dc.w 2,2,2,2,3
  2679.  dc.w 3,3,3
  2680. ShotGunAnim:
  2681.  dc.w 0
  2682.  dcb.w 12,2
  2683.  dcb.w 19,1
  2684.  dcb.w 11,2
  2685.  dcb.w 20,0
  2686.  dc.w 3
  2687.  
  2688. GunData: dc.l 0
  2689.  
  2690. PLR1_GunData:
  2691. ; 0=Pistol 1=Big Gun
  2692. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  2693.  
  2694. ; VISIBLE/INSTANT (0/FF)
  2695. ; damage,gotgun(b)
  2696. ; Delay (w), Lifetime of bullet (w)
  2697. ; Click or hold down (0,1)
  2698. ; BulSpd: (w)
  2699.  
  2700. ;0
  2701.  dc.w 0
  2702. ;2
  2703.  dc.b 8,3
  2704. ;4
  2705.  dc.b 15
  2706. ;5
  2707.  dc.b -1
  2708. ;6
  2709.  dc.b 4,$ff
  2710. ;8
  2711.  dc.w 5,-1,1,0
  2712. ;16
  2713.  dc.w 0,0,0
  2714. ;22
  2715.  dc.w 1
  2716.  
  2717.  ds.w 4
  2718.  
  2719. ;PlasmaGun
  2720.  
  2721.  dc.w 0
  2722.  dc.b 8,1
  2723.  dc.b 20
  2724.  dc.b 0
  2725.  dc.b 16,0
  2726.  dc.w 10,-1,0,5
  2727.  dc.w 0,0,0
  2728.  dc.w 1
  2729.  
  2730.  ds.w 4
  2731.  
  2732. ;RocketLauncher
  2733.  
  2734.  dc.w 0
  2735.  dc.b 8,9
  2736.  dc.b 2
  2737.  dc.b 0
  2738.  dc.b 12,0
  2739.  dc.w 30,-1,0,5
  2740.  dc.w 0,0,0
  2741.  dc.w 1
  2742.  
  2743.  
  2744.  ds.w 4
  2745.  
  2746. ; FlameThrower
  2747.  
  2748.  dc.w 90*8
  2749.  dc.b 1,22
  2750.  dc.b 40
  2751.  dc.b 0
  2752.  dc.b 8,$0    
  2753.  dc.w 5,50,1,4
  2754.  dc.w 0,0,0
  2755.  dc.w 1
  2756.  
  2757.  ds.w 4
  2758.  
  2759. ;Grenade launcher
  2760.  
  2761.  
  2762.  dc.w 0
  2763.  dc.b 8,9
  2764.  dc.b 6
  2765.  dc.b 0
  2766.  dc.b 8,0
  2767.  dc.w 50,100,1,5
  2768.  dc.w 60,3
  2769.  dc.w -1000
  2770.  dc.w 1
  2771.  
  2772.  ds.w 4
  2773.  
  2774. ; WORMGUN
  2775.  
  2776.  dc.w 0
  2777.  dc.b 0,0
  2778.  dc.b 0
  2779.  dc.b 0,0
  2780.  dc.w 0,-1,0,5
  2781.  dc.w 0,0
  2782.  dc.w 0
  2783.  dc.w 1
  2784.  ds.w 4
  2785.  
  2786. ; ToughMarineGun
  2787.  
  2788.  dc.w 0
  2789.  dc.b 0,0
  2790.  dc.b 0
  2791.  dc.b 0,0
  2792.  dc.w 0,-1,0,5
  2793.  dc.w 0,0
  2794.  dc.w 0
  2795.  dc.w 1
  2796.  ds.w 4
  2797.  
  2798. ; Shotgun
  2799.  
  2800. ;0
  2801.  dc.w 0
  2802. ;2
  2803.  dc.b 8,21
  2804. ;4
  2805.  dc.b 15
  2806. ;5
  2807.  dc.b -1
  2808. ;6
  2809.  dc.b 4,0
  2810. ;8
  2811.  dc.w 50,-1,1,0
  2812. ;16
  2813.  dc.w 0,0,0
  2814. ;22
  2815.  dc.w 7
  2816.  
  2817.  ds.w 4
  2818.  
  2819. PLR2_GunData:
  2820. ; 0=Pistol 1=Big Gun
  2821. ; ammoleft,ammopershot(b),gunnoise(b),ammoinclip(b)
  2822.  
  2823. ; VISIBLE/INSTANT (0/FF)
  2824. ; damage,gotgun(b)
  2825. ; Delay (w)
  2826.  
  2827. ;0
  2828.  dc.w 0
  2829. ;2
  2830.  dc.b 8,3
  2831. ;4
  2832.  dc.b 15
  2833. ;5
  2834.  dc.b -1
  2835. ;6
  2836.  dc.b 4,$ff
  2837. ;8
  2838.  dc.w 5,-1,1,0
  2839. ;16
  2840.  dc.w 0,0,0
  2841. ;22
  2842.  dc.w 1
  2843.  
  2844.  ds.w 4
  2845.  
  2846. ;PlasmaGun
  2847.  
  2848.  dc.w 0
  2849.  dc.b 8,1
  2850.  dc.b 20
  2851.  dc.b 0
  2852.  dc.b 16,0
  2853.  dc.w 10,-1,0,5
  2854.  dc.w 0,0,0
  2855.  dc.w 1
  2856.  
  2857.  ds.w 4
  2858.  
  2859. ;RocketLauncher
  2860.  
  2861.  dc.w 0
  2862.  dc.b 8,9
  2863.  dc.b 2
  2864.  dc.b 0
  2865.  dc.b 12,0
  2866.  dc.w 30,-1,0,5
  2867.  dc.w 0,0,0
  2868.  dc.w 1
  2869.  
  2870.  
  2871.  ds.w 4
  2872.  
  2873. ; FlameThrower
  2874.  
  2875.  dc.w 90*8
  2876.  dc.b 1,22
  2877.  dc.b 40
  2878.  dc.b 0
  2879.  dc.b 8,$0    
  2880.  dc.w 5,50,1,4
  2881.  dc.w 0,0,0
  2882.  dc.w 1
  2883.  
  2884.  ds.w 4
  2885.  
  2886. ;Grenade launcher
  2887.  
  2888.  
  2889.  dc.w 0
  2890.  dc.b 8,9
  2891.  dc.b 6
  2892.  dc.b 0
  2893.  dc.b 8,0
  2894.  dc.w 50,100,1,5
  2895.  dc.w 60,3
  2896.  dc.w -1000
  2897.  dc.w 1
  2898.  
  2899.  ds.w 4
  2900.  
  2901. ; WORMGUN
  2902.  
  2903.  dc.w 0
  2904.  dc.b 0,0
  2905.  dc.b 0
  2906.  dc.b 0,0
  2907.  dc.w 0,-1,0,5
  2908.  dc.w 0,0
  2909.  dc.w 0
  2910.  dc.w 1
  2911.  ds.w 4
  2912.  
  2913. ; ToughMarineGun
  2914.  
  2915.  dc.w 0
  2916.  dc.b 0,0
  2917.  dc.b 0
  2918.  dc.b 0,0
  2919.  dc.w 0,-1,0,5
  2920.  dc.w 0,0
  2921.  dc.w 0
  2922.  dc.w 1
  2923.  ds.w 4
  2924.  
  2925. ; Shotgun
  2926.  
  2927. ;0
  2928.  dc.w 0
  2929. ;2
  2930.  dc.b 8,21
  2931. ;4
  2932.  dc.b 15
  2933. ;5
  2934.  dc.b -1
  2935. ;6
  2936.  dc.b 4,0
  2937. ;8
  2938.  dc.w 50,-1,1,0
  2939. ;16
  2940.  dc.w 0,0,0
  2941. ;22
  2942.  dc.w 7
  2943.  
  2944.  ds.w 4
  2945.  
  2946.  
  2947.  
  2948. protA: dc.w 0
  2949.  
  2950. Path:
  2951. ; incbin "testpath"
  2952. endpath:
  2953. pathpt: dc.l Path
  2954.  
  2955.  
  2956. PLR1KEYS: dc.b 0
  2957. PLR1PATH: dc.b 0
  2958. PLR1MOUSE: dc.b -1
  2959. PLR1JOY: dc.b 0
  2960. PLR2KEYS: dc.b 0
  2961. PLR2PATH: dc.b 0
  2962. PLR2MOUSE: dc.b -1
  2963. PLR2JOY: dc.b 0
  2964.  
  2965.  even
  2966.  
  2967. PLR1_bobble: dc.w 0
  2968. PLR2_bobble: dc.w 0
  2969. xwobble: dc.l 0
  2970. xwobxoff: dc.w 0
  2971.  
  2972. xwobzoff: dc.w 0
  2973.  
  2974. PLR1_Control:
  2975.  
  2976. ; Take a snapshot of everything.
  2977.  
  2978.  move.l PLR1_xoff,d2
  2979.  move.l d2,PLR1_oldxoff
  2980.  move.l d2,oldx
  2981.  move.l PLR1_zoff,d3
  2982.  move.l d3,PLR1_oldzoff
  2983.  move.l d3,oldz
  2984.  move.l p1_xoff,d0
  2985.  move.l d0,PLR1_xoff
  2986.  move.l d0,newx
  2987.  move.l p1_zoff,d1
  2988.  move.l d1,newz
  2989.  move.l d1,PLR1_zoff
  2990.  
  2991.  move.l p1_height,PLR1_height
  2992.  
  2993.  sub.l d2,d0
  2994.  sub.l d3,d1
  2995.  move.l d0,xdiff
  2996.  move.l d1,zdiff
  2997.  move.w p1_angpos,d0
  2998.  move.w d0,PLR1_angpos
  2999.  
  3000.  move.l #SineTable,a1
  3001.  move.w (a1,d0.w),PLR1_sinval
  3002.  add.w #2048,d0
  3003.  and.w #8190,d0
  3004.  move.w (a1,d0.w),PLR1_cosval
  3005.  
  3006.  move.l p1_yoff,d0
  3007.  move.w p1_bobble,d1
  3008.  move.w (a1,d1.w),d1
  3009.  move.w d1,d3
  3010.  ble.s notnegative
  3011.  neg.w d1
  3012. notnegative:
  3013.  add.w #16384,d1
  3014.  asr.w #4,d1
  3015.  
  3016.  tst.b PLR1_Ducked
  3017.  bne.s .notdouble
  3018.  add.w d1,d1
  3019. .notdouble
  3020.  ext.l d1
  3021.  move.l PLR1_height,d4
  3022.  sub.l d1,d4
  3023.  add.l d1,d0
  3024.  
  3025.  cmp.b #'s',mors
  3026.  beq.s .otherwob
  3027.  asr.w #6,d3
  3028.  ext.l d3
  3029.  move.l d3,xwobble
  3030.  move.w PLR1_sinval,d1
  3031.  muls d3,d1
  3032.  move.w PLR1_cosval,d2
  3033.  muls d3,d2
  3034.  swap d1
  3035.  swap d2
  3036.  asr.w #7,d1
  3037.  move.w d1,xwobxoff
  3038.  asr.w #7,d2
  3039.  neg.w d2
  3040.  move.w d2,xwobzoff
  3041. .otherwob
  3042.  
  3043.  move.l d0,PLR1_yoff
  3044.  move.l d0,newy
  3045.  move.l d0,oldy
  3046.  
  3047.  move.l d4,thingheight
  3048.  move.l #40*256,StepUpVal
  3049.  tst.b PLR1_Ducked
  3050.  beq.s .okbigstep
  3051.  move.l #10*256,StepUpVal
  3052. .okbigstep:
  3053.  
  3054.  move.l #$1000000,StepDownVal
  3055.  
  3056.  move.l PLR1_Roompt,a0
  3057.  move.w ToTelZone(a0),d0
  3058.  blt .noteleport
  3059.  
  3060.  move.w ToTelX(a0),newx
  3061.  move.w ToTelZ(a0),newz
  3062.  move.w #-1,CollId
  3063.  move.l #%111111111111111111,CollideFlags
  3064.  bsr Collision
  3065.  tst.b hitwall
  3066.  beq.s .teleport
  3067.  
  3068.  move.w PLR1_xoff,newx
  3069.  move.w PLR1_zoff,newz
  3070.  bra .noteleport
  3071.  
  3072. .teleport:
  3073.  
  3074.  move.l PLR1_Roompt,a0
  3075.  move.w ToTelZone(a0),d0
  3076.  move.w ToTelX(a0),PLR1_xoff
  3077.  move.w ToTelZ(a0),PLR1_zoff
  3078.  move.l PLR1_yoff,d1
  3079.  sub.l ToZoneFloor(a0),d1
  3080.  move.l ZoneAdds,a0
  3081.  move.l (a0,d0.w*4),a0
  3082.  add.l LEVELDATA,a0
  3083.  move.l a0,PLR1_Roompt
  3084.  add.l ToZoneFloor(a0),d1
  3085.  move.l d1,PLR1s_yoff
  3086.  move.l d1,PLR1_yoff
  3087.  move.l d1,PLR1s_tyoff
  3088.  move.l PLR1_xoff,PLR1s_xoff
  3089.  move.l PLR1_zoff,PLR1s_zoff
  3090.  
  3091.  SAVEREGS
  3092.  move.w #0,Noisex
  3093.  move.w #0,Noisez
  3094.  move.w #26,Samplenum
  3095.  move.w #100,Noisevol
  3096.  move.b #$fa,IDNUM
  3097.  jsr MakeSomeNoise
  3098.  GETREGS
  3099.  
  3100.  bra .cantmove
  3101.  
  3102. .noteleport:
  3103.  
  3104.  move.l PLR1_Roompt,objroom
  3105.  move.w #%100000000,wallflags
  3106.  move.b PLR1_StoodInTop,StoodInTop
  3107.  
  3108.  move.l #%1011111110111000001,CollideFlags
  3109.  move.w #-1,CollId
  3110.  
  3111.  bsr Collision
  3112.  tst.b hitwall
  3113.  beq.s .nothitanything
  3114.  move.w oldx,PLR1_xoff
  3115.  move.w oldz,PLR1_zoff
  3116.  move.l PLR1_xoff,PLR1s_xoff
  3117.  move.l PLR1_zoff,PLR1s_zoff
  3118.  bra .cantmove
  3119. .nothitanything:
  3120.  
  3121.  move.w #40,extlen
  3122.  move.b #0,awayfromwall
  3123.  
  3124.  clr.b exitfirst
  3125.  clr.b wallbounce
  3126.  bsr MoveObject
  3127.  move.b StoodInTop,PLR1_StoodInTop
  3128.  move.l objroom,PLR1_Roompt
  3129.  move.w newx,PLR1_xoff
  3130.  move.w newz,PLR1_zoff
  3131.  move.l PLR1_xoff,PLR1s_xoff
  3132.  move.l PLR1_zoff,PLR1s_zoff
  3133.  
  3134. .cantmove:
  3135.  
  3136.  move.l PLR1_Roompt,a0
  3137.  
  3138.  move.l ToZoneFloor(a0),d0
  3139.  tst.b PLR1_StoodInTop
  3140.  beq.s notintop
  3141.  move.l ToUpperFloor(a0),d0
  3142. notintop:
  3143.  
  3144.  adda.w #ToZonePts,a0
  3145.  sub.l PLR1_height,d0
  3146.  move.l d0,PLR1s_tyoff
  3147.  move.w p1_angpos,tmpangpos
  3148.  
  3149. ; move.l (a0),a0        ; jump to viewpoint list
  3150.  * A0 is pointing at a pointer to list of points to rotate
  3151.  move.w (a0)+,d1
  3152.  ext.l d1
  3153.  add.l PLR1_Roompt,d1
  3154.  move.l d1,PLR1_PointsToRotatePtr
  3155.  tst.w (a0)+
  3156.  sne.s DRAWNGRAPHTOP
  3157.  beq.s nobackgraphics
  3158.  cmp.b #'s',mors
  3159.  beq.s nobackgraphics
  3160.  move.l a0,-(a7)
  3161.  jsr putinbackdrop 
  3162.  move.l (a7)+,a0
  3163. nobackgraphics:
  3164.  adda.w #10,a0
  3165.  move.l a0,PLR1_ListOfGraphRooms
  3166.  
  3167. *************************************************
  3168.  rts
  3169.  
  3170. DRAWNGRAPHTOP
  3171.  
  3172. tstzone: dc.l 0
  3173. CollId: dc.w 0
  3174.  
  3175. PLR2_Control:
  3176.  
  3177. ; Take a snapshot of everything.
  3178.  
  3179.  move.l PLR2_xoff,d2
  3180.  move.l d2,PLR2_oldxoff
  3181.  move.l d2,oldx
  3182.  move.l PLR2_zoff,d3
  3183.  move.l d3,PLR2_oldzoff
  3184.  move.l d3,oldz
  3185.  move.l p2_xoff,d0
  3186.  move.l d0,PLR2_xoff
  3187.  move.l d0,newx
  3188.  move.l p2_zoff,d1
  3189.  move.l d1,newz
  3190.  move.l d1,PLR2_zoff
  3191.  
  3192.  move.l p2_height,PLR2_height
  3193.  
  3194.  sub.l d2,d0
  3195.  sub.l d3,d1
  3196.  move.l d0,xdiff
  3197.  move.l d1,zdiff
  3198.  move.w p2_angpos,d0
  3199.  move.w d0,PLR2_angpos
  3200.  
  3201.  move.l #SineTable,a1
  3202.  move.w (a1,d0.w),PLR2_sinval
  3203.  add.w #2048,d0
  3204.  and.w #8190,d0
  3205.  move.w (a1,d0.w),PLR2_cosval
  3206.  
  3207.  move.l p2_yoff,d0
  3208.  move.w p2_bobble,d1
  3209.  move.w (a1,d1.w),d1
  3210.  move.w d1,d3
  3211.  ble.s .notnegative
  3212.  neg.w d1
  3213. .notnegative:
  3214.  add.w #16384,d1
  3215.  asr.w #4,d1
  3216.  add.w d1,d1
  3217.  ext.l d1
  3218.  move.l PLR2_height,d4
  3219.  sub.l d1,d4
  3220.  add.l d1,d0
  3221.  
  3222.  cmp.b #'s',mors
  3223.  bne.s .otherwob
  3224.  asr.w #6,d3
  3225.  ext.l d3
  3226.  move.l d3,xwobble
  3227.  move.w PLR2_sinval,d1
  3228.  muls d3,d1
  3229.  move.w PLR2_cosval,d2
  3230.  muls d3,d2
  3231.  swap d1
  3232.  swap d2
  3233.  asr.w #7,d1
  3234.  move.w d1,xwobxoff
  3235.  asr.w #7,d2
  3236.  neg.w d2
  3237.  move.w d2,xwobzoff
  3238. .otherwob
  3239.  
  3240.  move.l d0,PLR2_yoff
  3241.  move.l d0,newy
  3242.  move.l d0,oldy
  3243.  
  3244.  move.l d4,thingheight
  3245.  move.l #40*256,StepUpVal
  3246.  tst.b PLR2_Ducked
  3247.  beq.s .okbigstep
  3248.  move.l #10*256,StepUpVal
  3249. .okbigstep:
  3250.  
  3251.  move.l #$1000000,StepDownVal
  3252.  
  3253.  move.l PLR2_Roompt,a0
  3254.  move.w ToTelZone(a0),d0
  3255.  blt .noteleport
  3256.  
  3257.  move.w ToTelX(a0),newx
  3258.  move.w ToTelZ(a0),newz
  3259.  move.w #-1,CollId
  3260.  move.l #%111111111111111111,CollideFlags
  3261.  bsr Collision
  3262.  tst.b hitwall
  3263.  beq.s .teleport
  3264.  
  3265.  move.w PLR2_xoff,newx
  3266.  move.w PLR2_zoff,newz
  3267.  bra .noteleport
  3268.  
  3269. .teleport:
  3270.  
  3271.  move.l PLR2_Roompt,a0
  3272.  move.w ToTelZone(a0),d0
  3273.  move.w ToTelX(a0),PLR2_xoff
  3274.  move.w ToTelZ(a0),PLR2_zoff
  3275.  move.l PLR2_yoff,d1
  3276.  sub.l ToZoneFloor(a0),d1
  3277.  move.l ZoneAdds,a0
  3278.  move.l (a0,d0.w*4),a0
  3279.  add.l LEVELDATA,a0
  3280.  move.l a0,PLR2_Roompt
  3281.  add.l ToZoneFloor(a0),d1
  3282.  move.l d1,PLR2s_yoff
  3283.  move.l d1,PLR2_yoff
  3284.  move.l d1,PLR2s_tyoff
  3285.  move.l PLR2_xoff,PLR2s_xoff
  3286.  move.l PLR2_zoff,PLR2s_zoff
  3287.  
  3288.  SAVEREGS
  3289.  move.w #0,Noisex
  3290.  move.w #0,Noisez
  3291.  move.w #26,Samplenum
  3292.  move.w #100,Noisevol
  3293.  move.b #$fa,IDNUM
  3294.  jsr MakeSomeNoise
  3295.  GETREGS
  3296.  
  3297.  bra .cantmove
  3298.  
  3299. .noteleport:
  3300.  
  3301.  move.l PLR2_Roompt,objroom
  3302.  move.w #%100000000000,wallflags
  3303.  move.b PLR2_StoodInTop,StoodInTop
  3304.  
  3305.  move.l #%1011111010111100001,CollideFlags
  3306.  move.w #-1,CollId
  3307.  
  3308.  bsr Collision
  3309.  tst.b hitwall
  3310.  beq.s .nothitanything
  3311.  move.w oldx,PLR2_xoff
  3312.  move.w oldz,PLR2_zoff
  3313.  move.l PLR2_xoff,PLR2s_xoff
  3314.  move.l PLR2_zoff,PLR2s_zoff
  3315.  bra .cantmove
  3316. .nothitanything:
  3317.  
  3318.  move.w #40,extlen
  3319.  move.b #0,awayfromwall
  3320.  
  3321.  clr.b exitfirst
  3322.  clr.b wallbounce
  3323.  bsr MoveObject
  3324.  move.b StoodInTop,PLR2_StoodInTop
  3325.  move.l objroom,PLR2_Roompt
  3326.  move.w newx,PLR2_xoff
  3327.  move.w newz,PLR2_zoff
  3328.  move.l PLR2_xoff,PLR2s_xoff
  3329.  move.l PLR2_zoff,PLR2s_zoff
  3330.  
  3331. .cantmove
  3332.  
  3333.  move.l PLR2_Roompt,a0
  3334.  
  3335.  move.l ToZoneFloor(a0),d0
  3336.  tst.b PLR2_StoodInTop
  3337.  beq.s .notintop
  3338.  move.l ToUpperFloor(a0),d0
  3339. .notintop:
  3340.  
  3341.  adda.w #ToZonePts,a0
  3342.  sub.l PLR2_height,d0
  3343.  move.l d0,PLR2s_tyoff
  3344.  move.w p2_angpos,tmpangpos
  3345.  
  3346. ; move.l (a0),a0        ; jump to viewpoint list
  3347.  * A0 is pointing at a pointer to list of points to rotate
  3348.  move.w (a0)+,d1
  3349.  ext.l d1
  3350.  add.l PLR2_Roompt,d1
  3351.  move.l d1,PLR2_PointsToRotatePtr
  3352.  tst.w (a0)+
  3353.  beq.s .nobackgraphics
  3354.  cmp.b #'s',mors
  3355.  bne.s .nobackgraphics
  3356.  move.l a0,-(a7)
  3357.  jsr putinbackdrop 
  3358.  move.l (a7)+,a0
  3359. .nobackgraphics:
  3360.  adda.w #10,a0
  3361.  move.l a0,PLR2_ListOfGraphRooms
  3362.  
  3363. *****************************************************
  3364.  
  3365.  rts
  3366.  
  3367.  
  3368. KeyMap: ds.b 256
  3369.  
  3370. fillscrnwater:
  3371.  dc.w 0
  3372. DONTDOGUN:
  3373.  dc.w 0
  3374.  
  3375.  
  3376. DrawDisplay:
  3377.  
  3378.  
  3379.  clr.b fillscrnwater
  3380.  
  3381.  move.l #SineTable,a0
  3382.  move.w angpos,d0
  3383.  move.w (a0,d0.w),d6
  3384.  adda.w #2048,a0
  3385.  move.w (a0,d0.w),d7
  3386.  move.w d6,sinval
  3387.  move.w d7,cosval
  3388.  
  3389.  move.l #KeyMap,a5
  3390.  moveq #0,d5
  3391.  move.b look_behind_key,d5
  3392.  tst.b (a5,d5.w)
  3393.  sne DONTDOGUN
  3394.  beq.s .nolookback
  3395.  neg.w cosval
  3396.  neg.w sinval
  3397. .nolookback:
  3398.  
  3399.  
  3400.  move.l yoff,d0
  3401.  asr.l #8,d0
  3402.  move.w d0,d1
  3403.  add.w #256-32,d1
  3404.  and.w #255,d1
  3405.  move.w d1,wallyoff
  3406.  asl.w #2,d0
  3407.  move.w d0,flooryoff
  3408.  
  3409.  move.w xoff,d6
  3410.  move.w d6,d3
  3411.  asr.w #1,d3
  3412.  add.w d3,d6
  3413.  asr.w #1,d6
  3414.  move.w d6,xoff34
  3415.  
  3416.  move.w zoff,d6
  3417.  move.w d6,d3
  3418.  asr.w #1,d3
  3419.  add.w d3,d6
  3420.  asr.w #1,d6
  3421.  move.w d6,zoff34
  3422.  
  3423.  bsr RotateLevelPts
  3424.  bsr RotateObjectPts
  3425.  bsr CalcPLR1InLine
  3426.  
  3427.  
  3428.  cmp.b #'n',mors
  3429.  bne.s doplr2too
  3430.  move.l PLR2_Obj,a0
  3431.  move.w #-1,12(a0)
  3432.  move.w #-1,GraphicRoom(a0)
  3433.  bra noplr2either
  3434.  
  3435. doplr2too:
  3436.  bsr CalcPLR2InLine
  3437. noplr2either:
  3438.  
  3439.  move.l endoflist,a0
  3440. subroomloop:
  3441.  move.w -(a0),d7
  3442.  blt jumpoutofrooms
  3443.  
  3444. ; bsr setlrclip
  3445. ; move.w leftclip,d0
  3446. ; cmp.w rightclip,d0
  3447. ; bge subroomloop
  3448.  move.l a0,-(a7)
  3449.  
  3450.  move.l ZoneAdds,a0
  3451.  move.l (a0,d7.w*4),a0
  3452.  add.l LEVELDATA,a0
  3453.  move.l ToZoneRoof(a0),SplitHeight
  3454.  move.l a0,ROOMBACK
  3455.  
  3456.  move.l ZoneGraphAdds,a0
  3457.  move.l 4(a0,d7.w*8),a2
  3458.  move.l (a0,d7.w*8),a0
  3459.  
  3460.  add.l LEVELGRAPHICS,a0
  3461.  add.l LEVELGRAPHICS,a2
  3462.  move.l a2,ThisRoomToDraw+4
  3463.  move.l a0,ThisRoomToDraw
  3464.  
  3465.  move.l ListOfGraphRooms,a1
  3466.  
  3467.  
  3468.  
  3469. finditit:
  3470.  tst.w (a1)
  3471.  blt nomoretodoatall
  3472.  cmp.w (a1),d7
  3473.  beq outoffind
  3474.  adda.w #8,a1
  3475.  bra finditit
  3476.  
  3477. outoffind:
  3478.  
  3479.  move.l a1,-(a7)
  3480.  
  3481.  
  3482.  move.w #0,leftclip
  3483.  move.w #96,rightclip
  3484.  moveq #0,d7
  3485.  move.w 2(a1),d7
  3486.  blt.s outofrcliplop
  3487.  move.l LEVELCLIPS,a0
  3488.  lea (a0,d7.l*2),a0
  3489.  
  3490.  tst.w (a0)
  3491.  blt outoflcliplop
  3492.  
  3493.  bsr NEWsetlclip
  3494.  
  3495. intolcliplop:        ; clips
  3496.  tst.w (a0)
  3497.  blt outoflcliplop
  3498.  
  3499.  bsr NEWsetlclip 
  3500.  bra intolcliplop
  3501.  
  3502. outoflcliplop:
  3503.  
  3504.  addq #2,a0
  3505.  
  3506.  tst.w (a0)
  3507.  blt outofrcliplop
  3508.  
  3509.  bsr NEWsetrclip
  3510.  
  3511. intorcliplop:        ; clips
  3512.  tst.w (a0)
  3513.  blt outofrcliplop
  3514.  
  3515.  bsr NEWsetrclip 
  3516.  bra intorcliplop
  3517.  
  3518. outofrcliplop:
  3519.  
  3520.  
  3521.  move.w leftclip,d0
  3522.  cmp.w #96,d0
  3523.  bge dontbothercantseeit
  3524.  move.w rightclip,d1
  3525.  blt dontbothercantseeit
  3526.  cmp.w d1,d0
  3527.  bge dontbothercantseeit
  3528.  
  3529.  move.l yoff,d0
  3530.  cmp.l SplitHeight,d0
  3531.  blt botfirst
  3532.  
  3533.  move.l ThisRoomToDraw+4,a0
  3534.  cmp.l LEVELGRAPHICS,a0
  3535.  beq.s noupperroom
  3536.  st DOUPPER
  3537.  
  3538.  move.l ROOMBACK,a1
  3539.  move.l ToUpperRoof(a1),TOPOFROOM
  3540.  move.l ToUpperFloor(a1),BOTOFROOM
  3541.  
  3542.  move.l #CurrentPointBrights+2,PointBrightsPtr
  3543.  bsr dothisroom
  3544. noupperroom:
  3545.  move.l ThisRoomToDraw,a0
  3546.  clr.b DOUPPER
  3547.  move.l #CurrentPointBrights,PointBrightsPtr
  3548.  
  3549.  move.l ROOMBACK,a1
  3550.  move.l ToZoneRoof(a1),d0
  3551.  move.l d0,TOPOFROOM
  3552.  move.l ToZoneFloor(a1),d1
  3553.  move.l d1,BOTOFROOM
  3554.  
  3555.  move.l ToZoneWater(a1),d2
  3556.  cmp.l yoff,d2
  3557.  blt.s .abovefirst
  3558.  move.l d2,BEFOREWATTOP
  3559.  move.l d1,BEFOREWATBOT
  3560.  move.l d2,AFTERWATBOT
  3561.  move.l d0,AFTERWATTOP
  3562.  bra.s .belowfirst
  3563. .abovefirst:
  3564.  move.l d0,BEFOREWATTOP
  3565.  move.l d2,BEFOREWATBOT
  3566.  move.l d1,AFTERWATBOT
  3567.  move.l d2,AFTERWATTOP
  3568. .belowfirst:
  3569.  
  3570.  bsr dothisroom
  3571.  
  3572.  bra dontbothercantseeit
  3573. botfirst:
  3574.  
  3575.  move.l ThisRoomToDraw,a0
  3576.  clr.b DOUPPER
  3577.  move.l #CurrentPointBrights,PointBrightsPtr
  3578.  
  3579.  move.l ROOMBACK,a1
  3580.  move.l ToZoneRoof(a1),d0
  3581.  move.l d0,TOPOFROOM
  3582.  move.l ToZoneFloor(a1),d1
  3583.  move.l d1,BOTOFROOM
  3584.  
  3585.  move.l ToZoneWater(a1),d2
  3586.  cmp.l yoff,d2
  3587.  blt.s .abovefirst
  3588.  move.l d2,BEFOREWATTOP
  3589.  move.l d1,BEFOREWATBOT
  3590.  move.l d2,AFTERWATBOT
  3591.  move.l d0,AFTERWATTOP
  3592.  bra.s .belowfirst
  3593. .abovefirst:
  3594.  move.l d0,BEFOREWATTOP
  3595.  move.l d2,BEFOREWATBOT
  3596.  move.l d1,AFTERWATBOT
  3597.  move.l d2,AFTERWATTOP
  3598. .belowfirst:
  3599.  
  3600.  
  3601.  bsr dothisroom
  3602.  move.l ThisRoomToDraw+4,a0
  3603.  cmp.l LEVELGRAPHICS,a0
  3604.  beq.s noupperroom2
  3605.  move.l #CurrentPointBrights+2,PointBrightsPtr
  3606.  
  3607.  move.l ROOMBACK,a1
  3608.  move.l ToUpperRoof(a1),TOPOFROOM
  3609.  move.l ToUpperFloor(a1),BOTOFROOM
  3610.  
  3611.  st DOUPPER
  3612.  bsr dothisroom
  3613. noupperroom2:
  3614.  
  3615. dontbothercantseeit:
  3616. pastemp:
  3617.  
  3618.  move.l (a7)+,a1
  3619.  move.l ThisRoomToDraw,a0
  3620.  move.w (a0),d7
  3621.  
  3622.  adda.w #8,a1
  3623.  bra finditit
  3624.  
  3625. nomoretodoatall:
  3626.  
  3627.  move.l (a7)+,a0
  3628.  
  3629.  bra subroomloop
  3630.  
  3631. jumpoutofrooms:
  3632.  
  3633.  tst.b DONTDOGUN
  3634.  bne NOGUNLOOK
  3635.  
  3636.  cmp.b #'s',mors
  3637.  beq.s drawslavegun
  3638.  
  3639.  moveq #0,d0
  3640.  move.b PLR1_GunSelected,d0
  3641.  moveq #0,d1
  3642.  move.b PLR1_GunFrame,d1
  3643.  bsr DRAWINGUN
  3644.  bra drawngun
  3645.  
  3646. drawslavegun
  3647.  moveq #0,d0
  3648.  move.b PLR2_GunSelected,d0
  3649.  moveq #0,d1
  3650.  move.b PLR2_GunFrame,d1
  3651.  bsr DRAWINGUN
  3652.  
  3653. drawngun:
  3654.  
  3655. NOGUNLOOK:
  3656.  
  3657.  moveq #0,d1
  3658.  move.b PLR1_GunFrame,d1
  3659.  sub.w TempFrames,d1
  3660.  bgt.s .nn
  3661.  moveq #0,d1
  3662. .nn
  3663.  move.b d1,PLR1_GunFrame
  3664.  
  3665.  ble.s .donefire
  3666.  sub.b #1,PLR1_GunFrame
  3667. .donefire:
  3668.  
  3669.  moveq #0,d1
  3670.  move.b PLR2_GunFrame,d1
  3671.  sub.w TempFrames,d1
  3672.  bgt.s .nn2
  3673.  moveq #0,d1
  3674. .nn2
  3675.  move.b d2,PLR2_GunFrame
  3676.  
  3677.  ble.s .donefire2
  3678.  sub.b #1,PLR2_GunFrame
  3679. .donefire2:
  3680.  
  3681.  
  3682.  move.w #3,d5
  3683.  tst.b fillscrnwater
  3684.  beq nowaterfull
  3685.  bgt oknothalf
  3686.  moveq #1,d5
  3687. oknothalf:
  3688.  
  3689.  bclr.b #1,$bfe001
  3690.  
  3691.  move.l #brightentab,a2
  3692.  moveq #0,d2
  3693.  move.l frompt,a0
  3694.  add.l #104*4*60,a0
  3695.  
  3696.  move.w #31,d0
  3697. fw:
  3698.  move.w d5,d1
  3699.  move.l a0,a1
  3700. fwd:
  3701. val SET 104*4*19
  3702.  REPT 20
  3703.  and.w #$ff,val(a1)
  3704. val SET val-104*4
  3705.  ENDR
  3706.  sub.l #104*4*20,a1
  3707.  dbra d1,fwd
  3708.  addq #4,a0
  3709.  dbra d0,fw
  3710.  
  3711.  addq #4,a0
  3712.  
  3713.  move.w #31,d0
  3714. sw:
  3715.  move.w d5,d1
  3716.  move.l a0,a1
  3717. swd:
  3718. val SET 104*4*19
  3719.  REPT 20
  3720.  and.w #$ff,val(a1)
  3721. val SET val-104*4
  3722.  ENDR
  3723.  sub.l #104*4*20,a1
  3724.  dbra d1,swd
  3725.  addq #4,a0
  3726.  dbra d0,sw
  3727.  
  3728.  addq #4,a0
  3729.  
  3730.  move.w #31,d0
  3731. tw:
  3732.  move.w d5,d1
  3733.  move.l a0,a1
  3734. twd:
  3735. val SET 104*4*19
  3736.  REPT 20
  3737.  and.w #$ff,val(a1)
  3738. val SET val-104*4
  3739.  ENDR
  3740.  sub.l #104*4*20,a1
  3741.  dbra d1,twd
  3742.  addq #4,a0
  3743.  dbra d0,tw
  3744.  
  3745.  rts
  3746.  
  3747. nowaterfull:
  3748.  bset.b #1,$bfe001
  3749.  rts
  3750.  
  3751. prot9: dc.w 0
  3752.  
  3753. TempBuffer: ds.l 100 
  3754.  
  3755. ClipTable: ds.l 30
  3756. EndOfClipPt: dc.l 0
  3757. DOUPPER: dc.w 0
  3758.  
  3759. RealTable:
  3760.  dc.l prot1-78935450
  3761.  dc.l prot2-78935450
  3762.  dc.l prot3-78935450
  3763.  dc.l prot4-78935450
  3764.  dc.l prot5-78935450
  3765.  dc.l prot6-78935450
  3766.  dc.l prot7-78935450
  3767.  dc.l prot8-78935450
  3768.  dc.l prot9-78935450
  3769.  dc.l protA-78935450
  3770.  
  3771. dothisroom
  3772.  
  3773.  move.w (a0)+,d0
  3774.  move.w d0,currzone
  3775.  move.l #ZoneBrightTable,a1
  3776.  move.l (a1,d0.w*4),d1
  3777.  tst.b DOUPPER
  3778.  bne.s .okbot
  3779.  swap d1
  3780. .okbot:
  3781.  move.w d1,ZoneBright
  3782.  
  3783. polyloop:
  3784.  move.w (a0)+,d0
  3785.  blt jumpoutofloop
  3786.  beq itsawall
  3787.  cmp.w #3,d0
  3788.  beq itsasetclip
  3789.  blt itsafloor
  3790.  cmp.w #4,d0
  3791.  beq itsanobject
  3792.  cmp.w #5,d0
  3793.  beq.s itsanarc
  3794.  cmp.w #6,d0
  3795.  beq itsalightbeam
  3796.  cmp.w #7,d0
  3797.  beq.s itswater
  3798.  cmp.w #9,d0
  3799.  ble itsachunkyfloor
  3800.  cmp.w #11,d0
  3801.  ble.s itsabumpyfloor
  3802.  cmp.w #12,d0
  3803.  beq.s itsbackdrop
  3804.  cmp.w #13,d0
  3805.  beq.s itsaseewall
  3806.  
  3807.  bra polyloop
  3808.  
  3809. itsaseewall:
  3810.  st seethru
  3811.  jsr itsawalldraw
  3812.  bra polyloop
  3813.  
  3814. itsbackdrop:
  3815.  jsr putinbackdrop
  3816.  bra polyloop
  3817.  
  3818. itswater:
  3819.  move.w #3,d0
  3820.  clr.b gourfloor
  3821.  move.l #FloorLine,LineToUse
  3822.  st usewater
  3823.  clr.b usebumps
  3824.  jsr itsafloordraw
  3825.  bra polyloop
  3826.  
  3827. itsanarc:
  3828.  jsr CurveDraw
  3829.  bra polyloop
  3830.  
  3831. itsanobject:
  3832.  jsr ObjDraw
  3833.  bra polyloop
  3834.  
  3835. itsalightbeam:
  3836.  jsr LightDraw
  3837.  bra polyloop
  3838.  
  3839. itsabumpyfloor:
  3840.  sub.w #9,d0
  3841.  st usebumps
  3842.  st smoothbumps
  3843.  clr.b usewater
  3844.  move.l #BumpLine,LineToUse
  3845.  jsr itsafloordraw
  3846.  bra polyloop
  3847.  
  3848. itsachunkyfloor:
  3849.  subq.w #7,d0
  3850.  st usebumps
  3851.  sub.w #12,topclip
  3852. ; add.w #10,botclip
  3853.  clr.b smoothbumps
  3854.  clr.b usewater
  3855.  move.l #BumpLine,LineToUse
  3856.  jsr itsafloordraw
  3857.  add.w #12,topclip
  3858. ; sub.w #10,botclip
  3859.  bra polyloop 
  3860.  
  3861. itsafloor:
  3862.  
  3863.  move.l THEFLOORLINE,LineToUse
  3864. * 1,2 = floor/roof
  3865.  clr.b usewater
  3866.  clr.b usebumps
  3867.  move.b GOURSEL,gourfloor    
  3868.  jsr itsafloordraw
  3869.  bra polyloop
  3870. itsasetclip:
  3871.  bra polyloop
  3872. itsawall:
  3873.  clr.b seethru
  3874. ; move.l #stripbuffer,a1
  3875.  jsr itsawalldraw
  3876.  bra polyloop
  3877.  
  3878. jumpoutofloop:
  3879.  rts
  3880.  
  3881. GOURSEL: dc.w 0
  3882. ThisRoomToDraw: dc.l 0,0
  3883. SplitHeight: dc.l 0
  3884.  
  3885.  include "ab3:source/OrderZones"
  3886.  
  3887. ReadMouse:
  3888.  move.l #$dff000,a6
  3889.  clr.l d0
  3890.  clr.l d1
  3891.  move.w $a(a6),d0
  3892.  lsr.w #8,d0
  3893.  ext.l d0
  3894.  move.w d0,d3
  3895.  move.w oldmy,d2
  3896.  sub.w d2,d0
  3897.  
  3898.  cmp.w #127,d0
  3899.  blt nonegy
  3900.  move.w #255,d1
  3901.  sub.w d0,d1
  3902.  move.w d1,d0
  3903.  neg.w d0
  3904. nonegy:
  3905.  
  3906.  cmp.w #-127,d0
  3907.  bge nonegy2
  3908.  move.w #255,d1
  3909.  add.w d0,d1
  3910.  move.w d1,d0
  3911. nonegy2:
  3912.  
  3913.  add.b d0,d2
  3914.  add.w d0,oldy2
  3915.  move.w d2,oldmy
  3916.  move.w d2,d0
  3917.  
  3918.  move.w oldy2,d0
  3919.  move.w d0,ymouse
  3920.  
  3921.  clr.l d0
  3922.  clr.l d1
  3923.  move.w $a(a6),d0
  3924.  ext.w d0
  3925.  ext.l d0
  3926.  move.w d0,d3
  3927.  move.w oldmx,d2
  3928.  sub.w d2,d0
  3929.  
  3930.  cmp.w #127,d0
  3931.  blt nonegx
  3932.  move.w #255,d1
  3933.  sub.w d0,d1
  3934.  move.w d1,d0
  3935.  neg.w d0
  3936. nonegx:
  3937.  
  3938.  cmp.w #-127,d0
  3939.  bge nonegx2
  3940.  move.w #255,d1
  3941.  add.w d0,d1
  3942.  move.w d1,d0
  3943. nonegx2:
  3944.  
  3945.  add.b d0,d2
  3946.  move.w d0,d1
  3947.  move.w d2,oldmx
  3948.  
  3949.  move.w #$0,$dff034
  3950.  btst #2,$dff016
  3951.  beq.s noturn
  3952.  
  3953.  add.w d0,oldx2
  3954.  move.w oldx2,d0
  3955.  and.w #2047,d0
  3956.  move.w d0,oldx2
  3957.  
  3958.  asl.w #2,d0
  3959.  sub.w prevx,d0
  3960.  add.w d0,prevx
  3961.  add.w d0,angpos
  3962.  move.w #0,lrs
  3963.  rts
  3964.  
  3965. noturn:
  3966.  
  3967. ; got to move lr instead. 
  3968.  
  3969. ; d1 = speed moved l/r
  3970.  
  3971.  move.w d1,lrs
  3972.  
  3973.  rts
  3974.  
  3975. lrs: dc.w 0
  3976. prevx: dc.w 0
  3977.  
  3978. angpos: dc.w 0
  3979. mang: dc.w 0
  3980. oldymouse: dc.w 0
  3981. xmouse: dc.w 0
  3982. ymouse: dc.w 0
  3983. oldx2: dc.w 0
  3984. oldmx: dc.w 0
  3985. oldmy: dc.w 0
  3986. oldy2: dc.w 0
  3987.  
  3988. RotateLevelPts:
  3989.  
  3990.  move.w sinval,d6
  3991.  swap d6
  3992.  move.w cosval,d6
  3993.  
  3994.  move.l PointsToRotatePtr,a0
  3995.  move.l Points,a3
  3996.  move.l #Rotated,a1
  3997.  move.l #OnScreen,a2
  3998.  move.w xoff,d4
  3999.  move.w zoff,d5
  4000.  
  4001. ; move.w #$c40,$dff106
  4002. ; move.w #$f00,$dff180
  4003.  
  4004. pointrotlop:
  4005.  move.w (a0)+,d7
  4006.  blt.s outofpointrot
  4007.  
  4008.  move.w (a3,d7*4),d0
  4009.  sub.w d4,d0
  4010.  move.w d0,d2
  4011.  move.w 2(a3,d7*4),d1
  4012.  sub.w d5,d1
  4013.  muls d6,d2
  4014.  swap d6
  4015.  move.w d1,d3
  4016.  muls d6,d3
  4017.  sub.l d3,d2
  4018.  add.l d2,d2
  4019.  swap d2
  4020.  ext.l d2
  4021.  asl.l #7,d2
  4022.  add.l xwobble,d2
  4023.  move.l d2,(a1,d7*8)
  4024.  
  4025.  muls d6,d0
  4026.  swap d6
  4027.  muls d6,d1
  4028.  add.l d0,d1
  4029.  asl.l #2,d1
  4030.  swap d1
  4031.  move.l d1,4(a1,d7*8)
  4032.  
  4033.  tst.w d1
  4034.  bgt.s ptnotbehind
  4035.  tst.w d2
  4036.  bgt.s onrightsomewhere
  4037.  move.w #0,d2
  4038.  bra putin
  4039. onrightsomewhere:
  4040.  move.w #96,d2
  4041.  bra putin
  4042. ptnotbehind:
  4043.  
  4044.  divs d1,d2
  4045.  add.w #47,d2
  4046. putin:
  4047.  move.w d2,(a2,d7*2)
  4048.  
  4049.  bra pointrotlop
  4050. outofpointrot:
  4051.  
  4052. ; move.w #$c40,$dff106
  4053. ; move.w #$ff0,$dff180
  4054.  
  4055.  rts
  4056.  
  4057. PLR1_ObjDists
  4058.  ds.w 250
  4059. PLR2_ObjDists
  4060.  ds.w 250
  4061.  
  4062. CalcPLR1InLine:
  4063.  
  4064.  move.w PLR1_sinval,d5
  4065.  move.w PLR1_cosval,d6
  4066.  move.l ObjectData,a4
  4067.  move.l ObjectPoints,a0
  4068.  move.w NumObjectPoints,d7
  4069.  move.l #PLR1_ObsInLine,a2
  4070.  move.l #PLR1_ObjDists,a3
  4071.  
  4072. .objpointrotlop:
  4073.  
  4074.  move.w (a0),d0
  4075.  sub.w PLR1_xoff,d0
  4076.  move.w 4(a0),d1
  4077.  addq #8,a0
  4078.  
  4079.  tst.w 12(a4)
  4080.  blt .noworkout
  4081.  
  4082.  moveq #0,d2
  4083.  move.b 16(a4),d2
  4084.  move.l #ColBoxTable,a6
  4085.  lea (a6,d2.w*8),a6
  4086.  
  4087.  sub.w PLR1_zoff,d1
  4088.  move.w d0,d2
  4089.  muls d6,d2
  4090.  move.w d1,d3
  4091.  muls d5,d3
  4092.  sub.l d3,d2
  4093.  add.l d2,d2
  4094.  
  4095.  bgt.s .okh
  4096.  neg.l d2
  4097. .okh:
  4098.  swap d2
  4099.  
  4100.  muls d5,d0
  4101.  muls d6,d1
  4102.  add.l d0,d1
  4103.  asl.l #2,d1
  4104.  swap d1
  4105.  moveq #0,d3
  4106.  
  4107.  tst.w d1
  4108.  ble.s .notinline
  4109.  asr.w #1,d2
  4110.  cmp.w (a6),d2
  4111.  bgt.s .notinline
  4112.  
  4113.  st d3
  4114. .notinline
  4115.  move.b d3,(a2)+
  4116.  
  4117.  move.w d1,(a3)+
  4118.  
  4119.  add.w #64,a4
  4120.  dbra d7,.objpointrotlop
  4121.  
  4122.  rts
  4123.  
  4124. .noworkout:
  4125.  move.b #0,(a2)+
  4126.  move.w #0,(a3)+
  4127.  add.w #64,a4
  4128.  dbra d7,.objpointrotlop
  4129.  rts
  4130.  
  4131.  
  4132. CalcPLR2InLine:
  4133.  
  4134.  move.w PLR2_sinval,d5
  4135.  move.w PLR2_cosval,d6
  4136.  move.l ObjectData,a4
  4137.  move.l ObjectPoints,a0
  4138.  move.w NumObjectPoints,d7
  4139.  move.l #PLR2_ObsInLine,a2
  4140.  move.l #PLR2_ObjDists,a3
  4141.  
  4142. .objpointrotlop:
  4143.  
  4144.  move.w (a0),d0
  4145.  sub.w PLR2_xoff,d0
  4146.  move.w 4(a0),d1
  4147.  addq #8,a0
  4148.  
  4149.  tst.w 12(a4)
  4150.  blt .noworkout
  4151.  
  4152.  moveq #0,d2
  4153.  move.b 16(a4),d2
  4154.  move.l #ColBoxTable,a6
  4155.  lea (a6,d2.w*8),a6
  4156.  
  4157.  sub.w PLR2_zoff,d1
  4158.  move.w d0,d2
  4159.  muls d6,d2
  4160.  move.w d1,d3
  4161.  muls d5,d3
  4162.  sub.l d3,d2
  4163.  add.l d2,d2
  4164.  
  4165.  bgt.s .okh
  4166.  neg.l d2
  4167. .okh:
  4168.  swap d2
  4169.  
  4170.  muls d5,d0
  4171.  muls d6,d1
  4172.  add.l d0,d1
  4173.  asl.l #2,d1
  4174.  swap d1
  4175.  moveq #0,d3
  4176.  
  4177.  tst.w d1
  4178.  ble.s .notinline
  4179.  asr.w #1,d2
  4180.  cmp.w (a6),d2
  4181.  bgt.s .notinline
  4182.  
  4183.  st d3
  4184. .notinline
  4185.  move.b d3,(a2)+
  4186.  
  4187.  move.w d1,(a3)+
  4188.  
  4189.  add.w #64,a4
  4190.  dbra d7,.objpointrotlop
  4191.  
  4192.  rts
  4193.  
  4194. .noworkout:
  4195.  move.w #0,(a3)+
  4196.  move.b #0,(a2)+
  4197.  add.w #64,a4
  4198.  dbra d7,.objpointrotlop
  4199.  rts
  4200.  
  4201.  
  4202. RotateObjectPts:
  4203.  
  4204.  move.w sinval,d5
  4205.  move.w cosval,d6
  4206.  
  4207.  move.l ObjectData,a4
  4208.  move.l ObjectPoints,a0
  4209.  move.w NumObjectPoints,d7
  4210.  move.l #ObjRotated,a1
  4211.  
  4212. .objpointrotlop:
  4213.  
  4214.  move.w (a0),d0
  4215.  sub.w xoff,d0
  4216.  move.w 4(a0),d1
  4217.  addq #8,a0
  4218.  
  4219.  tst.w 12(a4)
  4220.  blt .noworkout
  4221.  
  4222.  sub.w zoff,d1
  4223.  move.w d0,d2
  4224.  muls d6,d2
  4225.  move.w d1,d3
  4226.  muls d5,d3
  4227.  sub.l d3,d2
  4228.  
  4229.  
  4230.  add.l d2,d2
  4231.  swap d2
  4232.  move.w d2,(a1)+
  4233.  
  4234.  muls d5,d0
  4235.  muls d6,d1
  4236.  add.l d0,d1
  4237.  asl.l #2,d1
  4238.  swap d1
  4239.  moveq #0,d3
  4240.  
  4241.  move.w d1,(a1)+
  4242.  ext.l d2
  4243.  asl.l #7,d2
  4244.  add.l xwobble,d2
  4245.  move.l d2,(a1)+
  4246.  sub.l xwobble,d2
  4247.  
  4248.  add.w #64,a4
  4249.  dbra d7,.objpointrotlop
  4250.  
  4251.  rts
  4252.  
  4253. .noworkout:
  4254.   move.l #0,(a1)+
  4255.   move.l #0,(a1)+
  4256.   add.w #64,a4
  4257.   dbra d7,.objpointrotlop
  4258.   rts
  4259.  
  4260. LightDraw:
  4261.  
  4262.  move.w (a0)+,d0
  4263.  move.w (a0)+,d1
  4264.  move.l #Rotated,a1
  4265.  move.w 6(a1,d0.w*8),d2
  4266.  ble.s oneendbehind
  4267.  move.w 6(a1,d1.w*8),d3
  4268.  bgt.s bothendsinfront
  4269.  
  4270. oneendbehind:
  4271.  rts
  4272. bothendsinfront:
  4273.  
  4274.  move.l #OnScreen,a2
  4275.  move.w (a2,d0.w*2),d0
  4276.  bge.s okleftend
  4277.  moveq #0,d0
  4278. okleftend:
  4279.  move.w (a2,d1.w*2),d1
  4280.  bgt.s somevis
  4281.  rts
  4282. somevis:
  4283.  cmp.w #95,d0
  4284.  ble.s somevis2
  4285.  rts
  4286. somevis2:
  4287.  cmp.w #95,d1
  4288.  ble.s okrightend
  4289.  move.w #95,d1
  4290. okrightend:
  4291.  
  4292.  sub.w d0,d1
  4293.  blt.s wrongbloodywayround
  4294.  move.l #brightentab,a4
  4295.  move.l #objintocop,a1
  4296.  lea (a1,d0.w*2),a1
  4297.  
  4298.  move.l frompt,a3
  4299.  move.w #104*4,d6
  4300.  move.w #79,d2
  4301. lacross:
  4302.  move.w d2,d3
  4303.  move.l a3,a2
  4304.  adda.w (a1)+,a2
  4305. ldown:
  4306.  add.w d6,a2
  4307.  move.w (a2),d7
  4308.  move.w (a4,d7.w*2),(a2)
  4309.  dbra d3,ldown
  4310.  dbra d1,lacross
  4311.  
  4312. wrongbloodywayround:
  4313.  
  4314.  rts
  4315.  
  4316. FaceToPlace: dc.w 0
  4317.  
  4318. Cheese:
  4319.  dc.w 4,15
  4320.  
  4321. FacesList:
  4322.  dc.w 0,4*4
  4323.  dc.w 1,2*4
  4324.  dc.w 0,2*4
  4325.  dc.w 2,2*4
  4326.  dc.w 0,2*4
  4327.  dc.w 1,3*4
  4328.  dc.w 0,2*4
  4329.  dc.w 2,3*4
  4330.  dc.w 0,5*4
  4331.  dc.w 1,2*4
  4332.  dc.w 0,2*4
  4333.  dc.w 2,2*4
  4334.  dc.w 0,2*4
  4335.  dc.w 1,2*4
  4336.  dc.w 0,2*4
  4337.  dc.w 2,3*4
  4338.  dc.w 0,1*4
  4339.  dc.w 1,3*4
  4340.  dc.w 0,1*4
  4341.  dc.w 2,3*4
  4342.  dc.w 0,1*4
  4343.  
  4344. EndOfFacesList:
  4345.  
  4346. FacesPtr:
  4347.  dc.l FacesList
  4348. FacesCounter:
  4349.  dc.w 0
  4350. Expression:
  4351.  dc.w 0
  4352.  
  4353. PlaceFace:
  4354.  
  4355.  move.w FacesCounter,d0
  4356.  subq #1,d0
  4357.  bgt.s NoNewFace
  4358.  
  4359.  move.l FacesPtr,a0
  4360.  
  4361.  move.w 2(a0),d0
  4362.  move.w (a0),Expression
  4363.  addq #4,a0
  4364.  cmp.l #EndOfFacesList,a0
  4365.  blt.s NotFirstFace
  4366.  
  4367.  move.l #FacesList,a0
  4368.  
  4369. NotFirstFace
  4370.  move.l a0,FacesPtr
  4371.  
  4372. NoNewFace:
  4373.  
  4374.  move.w d0,FacesCounter
  4375.  
  4376.  Move.w FaceToPlace,d0
  4377.  muls #5,d0
  4378.  add.w Expression,d0
  4379.  move.l #FacePlace+10,a0
  4380.  move.l #Faces,a1
  4381.  muls #(4*32*5),d0
  4382.  adda.w d0,a1
  4383.  move.w #4,d0
  4384.  move.w #24,d1
  4385.  
  4386.  move.w #4,d3
  4387. bitplaneloop:
  4388.  move.w #31,d2
  4389. PlaceFaceToPlaceInFacePlaceLoop:
  4390.  move.l (a1),(a0)
  4391.  adda.w d0,a1
  4392.  adda.w d1,a0
  4393.  dbra d2,PlaceFaceToPlaceInFacePlaceLoop
  4394.  dbra d3,bitplaneloop
  4395.  
  4396.  rts
  4397.  
  4398. Energy:
  4399.  dc.w 191
  4400. OldEnergy:
  4401.  dc.w 191
  4402. Ammo: dc.w 63
  4403. OldAmmo: dc.w 63
  4404.  
  4405. FullEnergy:
  4406.  move.w #127,Energy
  4407.  move.w #127,OldEnergy
  4408.  move.l #health,a0
  4409.  move.l #borders,a1
  4410.  add.l #25*8*2+6,a1
  4411.  lea 2592(a1),a2
  4412.  move.w #127,d0
  4413. PutInFull:
  4414.  move.b (a0)+,(a1)
  4415.  move.b (a0)+,8(a1)
  4416.  add.w #16,a1
  4417.  move.b (a0)+,(a2)
  4418.  move.b (a0)+,8(a2)
  4419.  add.w #16,a2
  4420.  dbra d0,PutInFull
  4421.  
  4422.  rts
  4423.  
  4424. EnergyBar:
  4425.  
  4426.  move.w Energy,d0
  4427.  cmp.w OldEnergy,d0
  4428.  bne.s gottochange
  4429.  
  4430. NoChange
  4431.  rts
  4432.  
  4433. gottochange:
  4434.   
  4435.  blt LessEnergy
  4436.  cmp.w #127,Energy
  4437.  blt.s NotMax
  4438.  move.w #127,Energy
  4439. NotMax:
  4440.  
  4441.  move.w Energy,d0
  4442.  move.w OldEnergy,d2
  4443.  sub.w d0,d2
  4444.  beq.s NoChange    
  4445.  neg.w d2
  4446.  
  4447.  move.w #127,d3
  4448.  sub.w d0,d3
  4449.  
  4450.  move.l #health,a0
  4451.  lea (a0,d3.w*4),a0
  4452.  move.l #borders+25*16+6,a1
  4453.  lsl.w #4,d3
  4454.  add.w d3,a1
  4455.  lea 2592(a1),a2
  4456.  
  4457. EnergyRise:
  4458.  move.b (a0)+,(a1)
  4459.  move.b (a0)+,8(a1)
  4460.  add.w #16,a1
  4461.  move.b (a0)+,(a2)
  4462.  move.b (a0)+,8(a2)
  4463.  add.w #16,a2
  4464.  subq #1,d2
  4465.  bgt.s EnergyRise
  4466.  
  4467.  move.w Energy,OldEnergy
  4468.  
  4469.  rts 
  4470.  
  4471. LessEnergy: 
  4472.  move.w OldEnergy,d2
  4473.  sub.w d0,d2
  4474.  
  4475.  move.w #127,d3
  4476.  sub.w OldEnergy,d3
  4477.  
  4478.  move.l #borders+25*16+6,a1
  4479.  asl.w #4,d3
  4480.  add.w d3,a1
  4481.  lea 2592(a1),a2
  4482.  
  4483. EnergyDrain:
  4484.  move.b #0,(a1)
  4485.  move.b #0,8(a1)
  4486.  move.b #0,(a2)
  4487.  move.b #0,8(a2)
  4488.  add.w #16,a1
  4489.  add.w #16,a2
  4490.  subq #1,d2
  4491.  bgt.s EnergyDrain
  4492.  
  4493.  move.w Energy,OldEnergy
  4494.  
  4495.  rts 
  4496.  
  4497. AmmoBar:
  4498.  
  4499.  move.w Ammo,d0
  4500.  cmp.w OldAmmo,d0
  4501.  bne.s .gottochange
  4502.  
  4503. .NoChange
  4504.  rts
  4505.  
  4506. .gottochange:
  4507.   
  4508.  blt LessAmmo
  4509.  cmp.w #63,Ammo
  4510.  blt.s .NotMax
  4511.  move.w #63,Ammo
  4512. .NotMax:
  4513.  
  4514.  move.w Ammo,d0
  4515.  move.w OldAmmo,d2
  4516.  sub.w d0,d2
  4517.  beq.s .NoChange
  4518.  neg.w d2
  4519.  
  4520.  move.w #63,d3
  4521.  sub.w d0,d3
  4522.  
  4523.  move.l #Ammunition,a0
  4524.  lea (a0,d3.w*8),a0
  4525.  move.l #borders+5184+25*16+1,a1
  4526.  lsl.w #5,d3
  4527.  add.w d3,a1
  4528.  lea 2592(a1),a2
  4529.  
  4530. AmmoRise:
  4531.  move.b (a0)+,(a1)
  4532.  move.b (a0)+,8(a1)
  4533.  add.w #16,a1
  4534.  move.b (a0)+,(a2)
  4535.  move.b (a0)+,8(a2)
  4536.  add.w #16,a2
  4537.  move.b (a0)+,(a1)
  4538.  move.b (a0)+,8(a1)
  4539.  add.w #16,a1
  4540.  move.b (a0)+,(a2)
  4541.  move.b (a0)+,8(a2)
  4542.  add.w #16,a2
  4543.  subq #1,d2
  4544.  bgt.s AmmoRise
  4545.  
  4546.  move.w Ammo,OldAmmo
  4547.  
  4548.  rts 
  4549.  
  4550.  
  4551. LessAmmo: 
  4552.  move.w OldAmmo,d2
  4553.  sub.w d0,d2
  4554.  
  4555.  move.w #63,d3
  4556.  sub.w OldAmmo,d3
  4557.  
  4558.  move.l #borders++5184+25*16+1,a1
  4559.  asl.w #5,d3
  4560.  add.w d3,a1
  4561.  lea 2592(a1),a2
  4562.  
  4563. AmmoDrain:
  4564.  move.b #0,(a1)
  4565.  move.b #0,8(a1)
  4566.  move.b #0,(a2)
  4567.  move.b #0,8(a2)
  4568.  add.w #16,a1
  4569.  add.w #16,a2
  4570.  move.b #0,(a1)
  4571.  move.b #0,8(a1)
  4572.  move.b #0,(a2)
  4573.  move.b #0,8(a2)
  4574.  add.w #16,a1
  4575.  add.w #16,a2
  4576.  subq #1,d2
  4577.  bgt.s AmmoDrain
  4578.  
  4579.  move.w Ammo,OldAmmo
  4580.  
  4581.  rts 
  4582.  
  4583. nulop:
  4584.  move.w #$0010,$dff000+intreq
  4585.  rte
  4586.  
  4587. doanything: dc.w 0
  4588.  
  4589. end:
  4590.  
  4591.  move.w PLR1_energy,Energy
  4592.  cmp.b #'s',mors
  4593.  bne.s .notsl
  4594.  move.w PLR2_energy,Energy
  4595. .notsl:
  4596.  
  4597.  bsr EnergyBar
  4598.  
  4599.  move.l drawpt,d0
  4600.  move.l olddrawpt,drawpt
  4601.  move.l d0,olddrawpt
  4602.  move.l d0,$dff084
  4603.  
  4604.  
  4605.  clr.b doanything
  4606.  cmp.b #'b',Prefsfile+3
  4607.  bne.s .noback
  4608.  jsr mt_end
  4609. .noback
  4610.  tst.w Energy
  4611.  bgt.s wevewon
  4612.  
  4613.  move.l #gameover,mt_data
  4614.  st UseAllChannels
  4615.  clr.b reachedend
  4616.  jsr mt_init
  4617. playgameover:
  4618.  move.l #$dff000,a6
  4619. waitfortop2:
  4620.  btst.b #0,intreqrl(a6)
  4621.  beq waitfortop2
  4622.  move.w #$1,intreq(a6)
  4623.  
  4624.  jsr mt_music
  4625.  
  4626.  tst.b reachedend
  4627.  beq.s playgameover
  4628.  
  4629.  bra wevelost
  4630.  
  4631.  
  4632. wevewon:
  4633.  
  4634.  cmp.b #'n',mors
  4635.  bne.s .nonextlev
  4636.  add.w #1,MAXLEVEL
  4637.  st FINISHEDLEVEL
  4638. .nonextlev:
  4639.  
  4640.  move.l #welldone,mt_data
  4641.  st UseAllChannels
  4642.  clr.b reachedend
  4643.  jsr mt_init
  4644. playwelldone:
  4645.  move.l #$dff000,a6
  4646. waitfortop3:
  4647.  btst.b #0,intreqrl(a6)
  4648.  beq waitfortop3
  4649.  move.w #$1,intreq(a6)
  4650.  
  4651.  jsr mt_music
  4652.  
  4653.  tst.b reachedend
  4654.  beq.s playwelldone
  4655.  
  4656.  cmp.w #16,MAXLEVEL
  4657.  bne .noendgame
  4658.  jsr ENDGAMESCROLL
  4659. .noendgame:
  4660.  
  4661. wevelost:
  4662.  jmp closeeverything 
  4663.  
  4664. endnomusic
  4665.  clr.b doanything
  4666.  cmp.b #'b',Prefsfile+3
  4667.  bne.s .noback
  4668.  jsr mt_end
  4669. .noback
  4670. *******************************
  4671. ; cmp.b #'n',mors
  4672. ; bne.s .nonextlev
  4673. ; cmp.w #15,MAXLEVEL
  4674. ; bge.s .nonextlev
  4675. ; add.w #1,MAXLEVEL
  4676. ; st FINISHEDLEVEL
  4677. ;.nonextlev:
  4678. ******************************
  4679.  
  4680.  jmp closeeverything
  4681.  
  4682. do32:
  4683.  move.w #31,d7
  4684.  move.w #$180,d1
  4685. across:
  4686.  move.w d1,(a1)+
  4687.  move.w d1,(a3)+
  4688.  move.w #0,(a1)+ 
  4689.  move.w #0,(a3)+
  4690.  add.w #2,d1
  4691.  dbra d7,across
  4692.  rts
  4693.  
  4694. ENDGAMESCROLL:
  4695.  include "endscroll.s"
  4696.  
  4697. ***********************************
  4698.  include "ab3:source/CD32JOY"
  4699.  
  4700.  
  4701.  
  4702. *************************************
  4703. * Set left and right clip values
  4704. *************************************
  4705.  
  4706.  
  4707.  
  4708. NEWsetlclip:
  4709.  move.l #OnScreen,a1
  4710.  move.l #Rotated,a2
  4711.  move.l CONNECT_TABLE,a3
  4712.  
  4713.  move.w (a0),d0
  4714.  bge.s .notignoreleft
  4715.  
  4716. ; move.l #0,(a6)
  4717.  
  4718.  bra .leftnotoktoclip
  4719. .notignoreleft:
  4720.  
  4721.  move.w 6(a2,d0*8),d3    ; left z val
  4722.  bgt.s .leftclipinfront
  4723.  addq #2,a0
  4724.  rts
  4725.  
  4726.  tst.w 6(a2,d0*8)
  4727.  bgt.s .leftnotoktoclip
  4728. .ignoreboth:
  4729. ; move.l #0,(a6)
  4730. ; move.l #96*65536,4(a6)
  4731.  move.w #0,leftclip
  4732.  move.w #96,rightclip
  4733.  addq #8,a6
  4734.  addq #2,a0
  4735.  rts
  4736.  
  4737. .leftclipinfront:
  4738.  move.w (a1,d0*2),d1    ; left x on screen
  4739.  move.w (a0),d2
  4740.  move.w 2(a3,d2.w*4),d2
  4741.  move.w (a1,d2.w*2),d2
  4742.  cmp.w d1,d2
  4743.  bgt.s .leftnotoktoclip
  4744.  
  4745. ; move.w d1,(a6)
  4746. ; move.w d3,2(a6)
  4747.  cmp.w leftclip,d1
  4748.  ble.s .leftnotoktoclip
  4749.  move.w d1,leftclip
  4750. .leftnotoktoclip:
  4751.  
  4752.  addq #2,a0
  4753.  
  4754.  rts
  4755.  
  4756. NEWsetrclip
  4757.  move.l #OnScreen,a1
  4758.  move.l #Rotated,a2
  4759.  move.l CONNECT_TABLE,a3
  4760.  move.w (a0),d0
  4761.  bge.s .notignoreright
  4762. ; move.w #96,4(a6)
  4763. ; move.w #0,6(a6)
  4764.  move.w #0,d4
  4765.  bra .rightnotoktoclip
  4766. .notignoreright:
  4767.  move.w 6(a2,d0*8),d4    ; right z val
  4768.  bgt.s .rightclipinfront
  4769. ; move.w #96,4(a6)
  4770. ; move.w #0,6(a6)
  4771.  bra.s .rightnotoktoclip
  4772.  
  4773. .rightclipinfront:
  4774.  move.w (a1,d0*2),d1    ; right x on screen
  4775.  move.w (a0),d2
  4776.  move.w (a3,d2.w*4),d2
  4777.  move.w (a1,d2.w*2),d2
  4778.  cmp.w d1,d2
  4779.  blt.s .rightnotoktoclip
  4780. ; move.w d1,4(a6)
  4781. ; move.w d4,6(a6)
  4782.  
  4783.  cmp.w rightclip,d1
  4784.  bge.s .rightnotoktoclip
  4785.  addq #1,d1
  4786.  move.w d1,rightclip
  4787. .rightnotoktoclip:
  4788.  addq #8,a6
  4789.  addq #2,a0
  4790.  rts
  4791.  
  4792. FIRSTsetlrclip:
  4793.  move.l #OnScreen,a1
  4794.  move.l #Rotated,a2
  4795.  
  4796.  move.w (a0)+,d0
  4797.  bge.s .notignoreleft
  4798.  bra .leftnotoktoclip
  4799. .notignoreleft:
  4800.  
  4801.  move.w 6(a2,d0*8),d3    ; left z val
  4802.  bgt.s .leftclipinfront
  4803.  
  4804.  move.w (a0),d0
  4805.  blt.s .ignoreboth
  4806.  tst.w 6(a2,d0*8)
  4807.  bgt.s .leftnotoktoclip
  4808. .ignoreboth
  4809.  move.w #96,rightclip
  4810.  move.w #0,leftclip
  4811.  addq #2,a0
  4812.  rts
  4813.  
  4814. .leftclipinfront:
  4815.  move.w (a1,d0*2),d1    ; left x on screen
  4816.  cmp.w leftclip,d1
  4817.  ble.s .leftnotoktoclip
  4818.  move.w d1,leftclip
  4819. .leftnotoktoclip:
  4820.  
  4821.  move.w (a0)+,d0
  4822.  bge.s .notignoreright
  4823.  move.w #0,d4
  4824.  bra .rightnotoktoclip
  4825. .notignoreright:
  4826.  move.w 6(a2,d0*8),d4    ; right z val
  4827.  ble.s .rightnotoktoclip
  4828.  
  4829. .rightclipinfront:
  4830.  move.w (a1,d0*2),d1    ; right x on screen
  4831.  addq #1,d1
  4832.  cmp.w rightclip,d1
  4833.  bge.s .rightnotoktoclip
  4834.  move.w d1,rightclip
  4835. .rightnotoktoclip:
  4836.  
  4837. ; move.w leftclip,d0
  4838. ; move.w rightclip,d1
  4839. ; cmp.w d0,d1
  4840. ; bge.s .noswap
  4841. ; move.w #96,rightclip
  4842. ; move.w #0,leftclip
  4843. ;.noswap:
  4844.  
  4845.  rts
  4846.  
  4847.  
  4848. leftclip2: dc.w 0
  4849. rightclip2: dc.w 0
  4850. ZoneBright: dc.w 0
  4851.  
  4852. npolys: dc.w 0
  4853.  
  4854. PLR1_fire: dc.b 0
  4855. PLR2_fire: dc.b 0
  4856.  
  4857. *****************************************************
  4858.  
  4859.  
  4860. pastdata:
  4861. ***********************************
  4862. * This routine animates brightnesses.
  4863.  
  4864.  
  4865. liftpt: dc.l liftanimtab
  4866.  
  4867. brightpt:
  4868.  dc.l brightanimtab
  4869.  
  4870.  
  4871. liftanim:
  4872.  rts
  4873.  
  4874. ******************************
  4875.  include "ab3:source/ObjectMove"
  4876.  include "ab3:source/Anims"
  4877. ******************************
  4878. startpass:
  4879. ; include "ab3:source/password_reloc.s"
  4880. endpass:
  4881.  
  4882. rotanimpt: dc.w 0
  4883. xradd: dc.w 5
  4884. yradd: dc.w 8
  4885. xrpos: dc.w 320
  4886. yrpos: dc.w 320
  4887.  
  4888. rotanim:
  4889.  rts
  4890.  
  4891. option:
  4892.  dc.l 0,0
  4893.  
  4894. ********** WALL STUFF *******************************
  4895.  
  4896.  include "AB3:source/wallroutine3.chipmem"
  4897.  
  4898. *****************************************************
  4899.  
  4900. ******************************************
  4901. * floor polygon
  4902.  
  4903. numsidestd: dc.w 0
  4904. bottomline: dc.w 0
  4905.  
  4906. checkforwater:
  4907.  tst.b usewater
  4908.  beq.s .notwater
  4909.  
  4910.  move.l Roompt,a1
  4911.  move.w (a1),d7
  4912.  cmp.w currzone,d7
  4913.  bne.s .notwater
  4914.  
  4915.  move.b #$f,fillscrnwater
  4916.  
  4917. .notwater:
  4918.  move.w (a0)+,d6    ; sides-1
  4919.  add.w d6,d6
  4920.  add.w d6,a0
  4921.  add.w #4+6,a0
  4922.  rts
  4923.  
  4924.  rts
  4925.  
  4926. NewCornerBuff:
  4927.  ds.l 100
  4928. CLRNOFLOOR: dc.w 0
  4929.  
  4930. itsafloordraw:
  4931.  
  4932. * If D0 =1 then its a floor otherwise (=2) it's
  4933. * a roof.
  4934.  
  4935.  move.w #0,above
  4936.  move.w (a0)+,d6    ; ypos of poly
  4937.  
  4938.  move.w d6,d7
  4939.  ext.l d7
  4940.  asl.l #6,d7
  4941.  cmp.l TOPOFROOM,d7
  4942.  blt checkforwater
  4943.  cmp.l BOTOFROOM,d7
  4944.  bgt.s dontdrawreturn
  4945.  
  4946.  move.w leftclip(pc),d7
  4947.  cmp.w rightclip(pc),d7
  4948.  bge.s dontdrawreturn
  4949.  
  4950.  move.w botclip,d7
  4951.  sub.w #40,d7
  4952.  ble.s dontdrawreturn
  4953.  sub.w flooryoff,d6
  4954.  bgt.s below
  4955.  blt.s aboveplayer
  4956.  
  4957.  tst.b usewater
  4958.  beq.s .notwater
  4959.  
  4960.  move.l Roompt,a1
  4961.  move.w (a1),d7
  4962.  cmp.w currzone,d7
  4963.  
  4964.  bne.s .notwater
  4965.  
  4966.  st fillscrnwater
  4967.  
  4968. .notwater:
  4969.  
  4970.  
  4971. dontdrawreturn:
  4972.  move.w (a0)+,d6    ; sides-1
  4973.  add.w d6,d6
  4974.  add.w d6,a0
  4975.  add.w #4+6,a0
  4976.  rts
  4977. aboveplayer:
  4978.  
  4979.  tst.b usewater
  4980.  beq.s .notwater
  4981.  
  4982.  move.l Roompt,a1
  4983.  move.w (a1),d7
  4984.  cmp.w currzone,d7
  4985.  bne.s .notwater
  4986.  
  4987.  move.b #$f,fillscrnwater
  4988.  
  4989. .notwater:
  4990.  
  4991.  btst #1,d0
  4992.  beq.s dontdrawreturn
  4993.  move.w #40,d7
  4994.  sub.w topclip,d7 
  4995.  ble.s dontdrawreturn
  4996.  move.w #1,d0
  4997.  move.w d0,above
  4998.  neg.w d6
  4999. below:
  5000.  btst #0,d0
  5001.  beq.s dontdrawreturn
  5002.  move.w d6,distaddr
  5003.  muls #64,d6
  5004.  move.l d6,ypos
  5005.  divs d7,d6        ; zpos of bottom
  5006.             ; visible line
  5007.  move.w d6,minz
  5008.  move.w d7,bottomline
  5009.  
  5010. ; Go round each point finding out
  5011. ; if it should be visible or not.
  5012.  
  5013.  move.l a0,-(a7)
  5014.  
  5015.  move.w (a0)+,d7    ; number of sides
  5016.  move.l #Rotated,a1
  5017.  move.l #OnScreen,a2
  5018.  move.l #NewCornerBuff,a3
  5019.  moveq #0,d4
  5020.  moveq #0,d5
  5021.  moveq #0,d6
  5022.  clr.b anyclipping
  5023.  
  5024. cornerprocessloop:
  5025.  
  5026.  move.w (a0)+,d0
  5027.  move.w 6(a1,d0.w*8),d1
  5028.  ble  .canttell
  5029.  
  5030.  move.w (a2,d0.w*2),d3
  5031.  cmp.w leftclip,d3
  5032.  bgt.s .nol
  5033.  st d4
  5034.  st anyclipping
  5035.  bra.s .nos
  5036. .nol:
  5037.  cmp.w rightclip,d3
  5038.  blt.s .nor
  5039.  st d6
  5040.  st anyclipping
  5041.  bra.s .nos
  5042. .nor:
  5043.  st d5
  5044. .nos:
  5045.  bra .cantell
  5046.  
  5047. .canttell:
  5048.  st d5
  5049.  st anyclipping
  5050.  
  5051. .cantell:
  5052.  
  5053.  
  5054.  dbra d7,cornerprocessloop
  5055.  
  5056.  move.l (a7)+,a0
  5057.  tst.b d5
  5058.  bne.s somefloortodraw
  5059.  eor.b d4,d6
  5060.  bne dontdrawreturn
  5061.  
  5062. somefloortodraw:
  5063.  
  5064.  tst.b gourfloor
  5065.  bne goursides
  5066.  
  5067.  move.w #80,top
  5068.  move.w #-1,bottom
  5069.  move.w #0,drawit
  5070.  move.l #Rotated,a1
  5071.  move.l #OnScreen,a2
  5072.  move.w (a0)+,d7    ; no of sides
  5073. sideloop:
  5074.  move.w minz,d6
  5075.  move.w (a0)+,d1
  5076.  move.w (a0),d3
  5077.  move.w 6(a1,d1*8),d4    ;first z
  5078.  cmp.w d6,d4
  5079.  bgt firstinfront
  5080.  move.w 6(a1,d3*8),d5    ; sec z
  5081.  cmp.w d6,d5
  5082.  ble bothbehind
  5083. ** line must be on left and partially behind.
  5084.  sub.w d5,d4
  5085.  move.l (a1,d1*8),d0
  5086.  sub.l (a1,d3*8),d0
  5087.  asr.l #7,d0
  5088.  sub.w d5,d6
  5089.  muls d6,d0    ; new x coord
  5090.  divs d4,d0
  5091.  ext.l d0
  5092.  asl.l #7,d0
  5093.  
  5094.  add.l (a1,d3*8),d0
  5095.  move.w minz,d4
  5096.  move.w (a2,d3*2),d2
  5097.  divs d4,d0
  5098.  add.w #47,d0
  5099.  move.l ypos,d3
  5100.  divs d5,d3
  5101.  move.w bottomline,d1 
  5102.  bra lineclipped
  5103.  
  5104. firstinfront:
  5105.  move.w 6(a1,d3*8),d5    ; sec z
  5106.  cmp.w d6,d5
  5107.  bgt bothinfront
  5108. ** line must be on right and partially behind.
  5109.  sub.w d4,d5    ; dz
  5110.  move.l (a1,d3*8),d2
  5111.  sub.l (a1,d1*8),d2    ; dx
  5112.  sub.w d4,d6
  5113.  asr.l #7,d2
  5114.  muls d6,d2    ; new x coord
  5115.  divs d5,d2
  5116.  ext.l d2
  5117.  asl.l #7,d2
  5118.  add.l (a1,d1*8),d2
  5119.  move.w minz,d5
  5120.  move.w (a2,d1*2),d0
  5121.  divs d5,d2
  5122.  add.w #47,d2
  5123.  move.l ypos,d1
  5124.  divs d4,d1
  5125.  move.w bottomline,d3 
  5126.  bra lineclipped
  5127.  
  5128. bothinfront:
  5129.  
  5130. * Also, usefully enough, both are on-screen
  5131. * so no bottom clipping is needed.
  5132.  
  5133.  move.w (a2,d1*2),d0    ; first x
  5134.  move.w (a2,d3*2),d2    ; second x
  5135.  move.l ypos,d1
  5136.  move.l d1,d3
  5137.  divs d4,d1        ; first y
  5138.  divs d5,d3        ; second y
  5139. lineclipped:
  5140.  move.l #rightsidetab,a3
  5141.  cmp.w d1,d3
  5142.  beq lineflat
  5143.  st drawit
  5144.  bgt lineonright
  5145.  move.l #leftsidetab,a3
  5146.  exg d1,d3
  5147.  exg d0,d2
  5148.  
  5149.  lea (a3,d1*2),a3
  5150.  
  5151.  cmp.w top(pc),d1
  5152.  bge.s .nonewtop
  5153.  move.w d1,top
  5154. .nonewtop:
  5155.  cmp.w bottom(pc),d3
  5156.  ble.s .nonewbot
  5157.  move.w d3,bottom
  5158. .nonewbot:
  5159.  
  5160.  sub.w d1,d3    ; dy
  5161.  sub.w d0,d2    ; dx
  5162.  
  5163.  blt .linegoingleft
  5164.  sub.w #1,d0
  5165.  
  5166.  ext.l d2
  5167.  divs d3,d2
  5168.  move.w d2,d6
  5169.  swap d2
  5170.  
  5171. ; moveq #0,d6
  5172. ; sub.w d3,d2
  5173. ; blt.s .noco
  5174. ;.makeco
  5175. ; addq #1,d6
  5176. ; sub.w d3,d2
  5177. ; bge.s .makeco
  5178. ;.noco
  5179. ; add.w d3,d2
  5180.  
  5181.  move.w d3,d4
  5182.  move.w d3,d5
  5183.  subq #1,d5
  5184.  move.w d6,d1
  5185.  addq #1,d1
  5186.  
  5187. .pixlopright:
  5188.  move.w d0,(a3)+
  5189.  sub.w d2,d4
  5190.  bge.s .nobigstep
  5191.  add.w d1,d0
  5192.  add.w d3,d4
  5193.  dbra d5,.pixlopright
  5194.  bra lineflat
  5195. .nobigstep
  5196.  add.w d6,d0
  5197.  dbra d5,.pixlopright
  5198.  bra lineflat
  5199.  
  5200. .linegoingleft:
  5201.  
  5202.  sub.w #1,d0
  5203.  
  5204.  neg.w d2
  5205.  
  5206.  ext.l d2
  5207.  divs d3,d2
  5208.  move.w d2,d6
  5209.  swap d2
  5210.  
  5211.  
  5212. ; moveq #0,d6
  5213. ; sub.w d3,d2
  5214. ; blt.s .nocol
  5215. ;.makecol
  5216. ; addq #1,d6
  5217. ; sub.w d3,d2
  5218. ; bge.s .makecol
  5219. ;.nocol
  5220. ; add.w d3,d2
  5221.  
  5222.  
  5223.  
  5224.  move.w d3,d4
  5225.  move.w d3,d5
  5226.  subq #1,d5
  5227.  
  5228.  move.w d6,d1
  5229.  addq #1,d1
  5230.  
  5231. .pixlopleft:
  5232.  sub.w d2,d4
  5233.  bge.s .nobigstepl
  5234.  sub.w d1,d0
  5235.  add.w d3,d4
  5236.  move.w d0,(a3)+
  5237.  dbra d5,.pixlopleft
  5238.  bra lineflat
  5239.  
  5240. .nobigstepl
  5241.  sub.w d6,d0
  5242.  move.w d0,(a3)+
  5243.  dbra d5,.pixlopleft
  5244.  bra lineflat
  5245.  
  5246. lineonright:
  5247.  
  5248.  lea (a3,d1*2),a3
  5249.  
  5250.  cmp.w top(pc),d1
  5251.  bge.s .nonewtop
  5252.  move.w d1,top
  5253. .nonewtop:
  5254.  cmp.w bottom(pc),d3
  5255.  ble.s .nonewbot
  5256.  move.w d3,bottom
  5257. .nonewbot:
  5258.  
  5259.  sub.w d1,d3    ; dy
  5260.  sub.w d0,d2    ; dx
  5261.  blt .linegoingleft
  5262. ; addq #1,d0
  5263.  ext.l d2
  5264.  divs d3,d2
  5265.  move.w d2,d6
  5266.  swap d2
  5267.  
  5268. ; moveq #0,d6
  5269. ; sub.w d3,d2
  5270. ; blt.s .noco
  5271. ;.makeco
  5272. ; addq #1,d6
  5273. ; sub.w d3,d2
  5274. ; bge.s .makeco
  5275. ;.noco
  5276. ; add.w d3,d2
  5277.  
  5278.  move.w d3,d4
  5279.  move.w d3,d5
  5280.  subq #1,d5
  5281.  move.w d6,d1
  5282.  addq #1,d1
  5283.  
  5284. .pixlopright:
  5285.  sub.w d2,d4
  5286.  bge.s .nobigstep
  5287.  add.w d1,d0
  5288.  add.w d3,d4
  5289.  move.w d0,(a3)+
  5290.  dbra d5,.pixlopright
  5291.  bra lineflat
  5292.  
  5293. .nobigstep
  5294.  add.w d6,d0
  5295.  move.w d0,(a3)+
  5296.  dbra d5,.pixlopright
  5297.  bra lineflat
  5298.  
  5299. .linegoingleft:
  5300. ; addq #1,d0
  5301.  neg.w d2
  5302.  
  5303.  ext.l d2
  5304.  divs d3,d2
  5305.  move.w d2,d6
  5306.  swap d2
  5307.  
  5308.  
  5309. ; moveq #0,d6
  5310. ; sub.w d3,d2
  5311. ; blt.s .nocol
  5312. ;.makecol
  5313. ; addq #1,d6
  5314. ; sub.w d3,d2
  5315. ; bge.s .makecol
  5316. ;.nocol
  5317. ; add.w d3,d2
  5318.  
  5319.  move.w d3,d4
  5320.  move.w d3,d5
  5321.  subq #1,d5
  5322.  move.w d6,d1
  5323.  addq #1,d1
  5324.  
  5325. .pixlopleft:
  5326.  move.w d0,(a3)+
  5327.  sub.w d2,d4
  5328.  bge.s .nobigstepl
  5329.  sub.w d1,d0
  5330.  add.w d3,d4
  5331.  dbra d5,.pixlopleft
  5332.  bra lineflat
  5333.  
  5334. .nobigstepl
  5335.  sub.w d6,d0
  5336.  dbra d5,.pixlopleft
  5337.  
  5338. lineflat:
  5339.  
  5340. bothbehind:
  5341.  dbra d7,sideloop
  5342.  bra pastsides
  5343.  
  5344. fbr: dc.w 0
  5345. sbr: dc.w 0
  5346.  
  5347. goursides:
  5348.  
  5349.  move.w #80,top
  5350.  move.w #-1,bottom
  5351.  move.w #0,drawit
  5352.  move.l #Rotated,a1
  5353.  move.l #OnScreen,a2
  5354.  move.w (a0)+,d7    ; no of sides
  5355. sideloopGOUR:
  5356.  move.w minz,d6
  5357.  move.w (a0)+,d1
  5358.  move.w (a0),d3
  5359.  
  5360.  move.l PointBrightsPtr,a4
  5361.  move.w (a4,d1.w*4),fbr
  5362.  move.w (a4,d3.w*4),sbr
  5363.  
  5364.  move.w 6(a1,d1*8),d4    ;first z
  5365.  cmp.w d6,d4
  5366.  bgt firstinfrontGOUR
  5367.  move.w 6(a1,d3*8),d5    ; sec z
  5368.  cmp.w d6,d5
  5369.  ble bothbehindGOUR
  5370. ** line must be on left and partially behind.
  5371.  sub.w d5,d4
  5372.  
  5373.  move.w fbr,d0
  5374.  sub.w sbr,d0
  5375.  sub.w d5,d6
  5376.  muls d6,d0
  5377.  divs d4,d0
  5378.  add.w sbr,d0
  5379.  move.w d0,fbr
  5380.  
  5381.  move.l (a1,d1*8),d0
  5382.  sub.l (a1,d3*8),d0
  5383.  asr.l #7,d0
  5384.  muls d6,d0    ; new x coord
  5385.  divs d4,d0
  5386.  ext.l d0
  5387.  asl.l #7,d0
  5388.  
  5389.  add.l (a1,d3*8),d0
  5390.  move.w minz,d4
  5391.  move.w (a2,d3*2),d2
  5392.  divs d4,d0
  5393.  add.w #47,d0
  5394.  move.l ypos,d3
  5395.  divs d5,d3
  5396.  
  5397.  move.w bottomline,d1 
  5398.  bra lineclippedGOUR
  5399.  
  5400. firstinfrontGOUR:
  5401.  move.w 6(a1,d3*8),d5    ; sec z
  5402.  cmp.w d6,d5
  5403.  bgt bothinfrontGOUR
  5404. ** line must be on right and partially behind.
  5405.  sub.w d4,d5    ; dz
  5406.  
  5407.  move.w sbr,d2
  5408.  sub.w fbr,d2
  5409.  sub.w d4,d6
  5410.  muls d6,d2
  5411.  divs d5,d2
  5412.  add.w fbr,d2
  5413.  move.w d2,sbr
  5414.  
  5415.  move.l (a1,d3*8),d2
  5416.  sub.l (a1,d1*8),d2    ; dx
  5417.  asr.l #7,d2
  5418.  muls d6,d2    ; new x coord
  5419.  divs d5,d2
  5420.  ext.l d2
  5421.  asl.l #7,d2
  5422.  add.l (a1,d1*8),d2
  5423.  move.w minz,d5
  5424.  move.w (a2,d1*2),d0
  5425.  divs d5,d2
  5426.  add.w #47,d2
  5427.  move.l ypos,d1
  5428.  divs d4,d1
  5429.  move.w bottomline,d3 
  5430.  bra lineclippedGOUR
  5431.  
  5432. bothinfrontGOUR:
  5433.  
  5434. * Also, usefully enough, both are on-screen
  5435. * so no bottom clipping is needed.
  5436.  
  5437.  move.w (a2,d1*2),d0    ; first x
  5438.  move.w (a2,d3*2),d2    ; second x
  5439.  move.l ypos,d1
  5440.  move.l d1,d3
  5441.  divs d4,d1        ; first y
  5442.  divs d5,d3        ; second y
  5443. lineclippedGOUR:
  5444.  move.l #rightsidetab,a3
  5445.  cmp.w d1,d3
  5446.  bne linenotflatGOUR
  5447.  
  5448. ; move.w fbr,d4
  5449. ; move.w sbr,d5
  5450. ; cmp.w d0,d2
  5451. ; bgt.s .nsw
  5452. ; exg d4,d5
  5453. ;.nsw:
  5454.  
  5455. ; move.l #leftbrighttab,a3
  5456. ; move.w d4,(a3,d3.w)
  5457. ; move.l #rightbrighttab,a3
  5458. ; move.w d5,(a3,d3.w) 
  5459.  bra lineflatGOUR
  5460.  
  5461. linenotflatGOUR
  5462.  st drawit
  5463.  bgt lineonrightGOUR
  5464.  move.l #leftsidetab,a3
  5465.  exg d1,d3
  5466.  exg d0,d2
  5467.  
  5468.  lea (a3,d1*2),a3
  5469.  lea leftbrighttab-leftsidetab(a3),a4
  5470.  
  5471.  cmp.w top(pc),d1
  5472.  bge.s .nonewtop
  5473.  move.w d1,top
  5474. .nonewtop:
  5475.  cmp.w bottom(pc),d3
  5476.  ble.s .nonewbot
  5477.  move.w d3,bottom
  5478. .nonewbot:
  5479.  
  5480.  sub.w d1,d3    ; dy
  5481.  sub.w d0,d2    ; dx
  5482.  
  5483.  blt .linegoingleft
  5484.  sub.w #1,d0
  5485.  
  5486.  ext.l d2
  5487.  divs d3,d2
  5488.  move.w d2,d6
  5489.  swap d2
  5490.  move.w d2,a5
  5491.  
  5492. ; moveq #0,d6
  5493. ; sub.w d3,d2
  5494. ; blt.s .noco
  5495. ;.makeco
  5496. ; addq #1,d6
  5497. ; sub.w d3,d2
  5498. ; bge.s .makeco
  5499. ;.noco
  5500. ; add.w d3,d2
  5501.  
  5502.  move.w d3,d4
  5503.  move.w d3,d5
  5504.  subq #1,d5
  5505.  move.w d6,d1
  5506.  addq #1,d1
  5507.  move.w d1,a6
  5508.  
  5509.  moveq #0,d1
  5510.  move.w sbr,d1
  5511.  move.w fbr,d2
  5512.  sub.w d1,d2
  5513.  ext.l d2
  5514.  asl.w #8,d2
  5515.  asl.w #3,d2
  5516.  divs d3,d2 
  5517.  ext.l d2
  5518.  asl.l #5,d2
  5519.  swap d1
  5520.  
  5521. .pixlopright:
  5522.  move.w d0,(a3)+
  5523.  swap d1
  5524.  move.w d1,(a4)+
  5525.  swap d1
  5526.  add.l d2,d1
  5527.  
  5528.  sub.w a5,d4
  5529.  bge.s .nobigstep
  5530.  add.w a6,d0
  5531.  add.w d3,d4
  5532.  dbra d5,.pixlopright
  5533.  bra lineflatGOUR
  5534. .nobigstep
  5535.  
  5536.  add.w d6,d0
  5537.  dbra d5,.pixlopright
  5538.  bra lineflatGOUR
  5539.  
  5540. .linegoingleft:
  5541.  
  5542.  sub.w #1,d0
  5543.  
  5544.  neg.w d2
  5545.  
  5546.  ext.l d2
  5547.  divs d3,d2
  5548.  move.w d2,d6
  5549.  swap d2
  5550.  
  5551.  
  5552. ; moveq #0,d6
  5553. ; sub.w d3,d2
  5554. ; blt.s .nocol
  5555. ;.makecol
  5556. ; addq #1,d6
  5557. ; sub.w d3,d2
  5558. ; bge.s .makecol
  5559. ;.nocol
  5560. ; add.w d3,d2
  5561.  
  5562.  move.w d3,d4
  5563.  move.w d3,d5
  5564.  subq #1,d5
  5565.  
  5566.  move.w d6,d1
  5567.  addq #1,d1
  5568.  move.w d1,a6
  5569.  move.w d2,a5
  5570.  
  5571.  moveq #0,d1
  5572.  move.w sbr,d1
  5573.  move.w fbr,d2
  5574.  sub.w d1,d2
  5575.  ext.l d2
  5576.  asl.w #8,d2
  5577.  asl.w #3,d2
  5578.  divs d3,d2 
  5579.  ext.l d2
  5580.  asl.l #5,d2
  5581.  swap d1
  5582.  
  5583. .pixlopleft:
  5584.  
  5585.  swap d1
  5586.  move.w d1,(a4)+
  5587.  swap d1
  5588.  add.l d2,d1
  5589.  
  5590.  sub.w a5,d4
  5591.  bge.s .nobigstepl
  5592.  sub.w a6,d0
  5593.  add.w d3,d4
  5594.  move.w d0,(a3)+
  5595.  dbra d5,.pixlopleft
  5596.  bra lineflatGOUR
  5597.  
  5598. .nobigstepl
  5599.  sub.w d6,d0
  5600.  move.w d0,(a3)+
  5601.  dbra d5,.pixlopleft
  5602.  bra lineflatGOUR
  5603.  
  5604. lineonrightGOUR:
  5605.  
  5606.  lea (a3,d1*2),a3
  5607.  
  5608.  lea rightbrighttab-rightsidetab(a3),a4
  5609.  
  5610.  cmp.w top(pc),d1
  5611.  bge.s .nonewtop
  5612.  move.w d1,top
  5613. .nonewtop:
  5614.  cmp.w bottom(pc),d3
  5615.  ble.s .nonewbot
  5616.  move.w d3,bottom
  5617. .nonewbot:
  5618.  
  5619.  sub.w d1,d3    ; dy
  5620.  sub.w d0,d2    ; dx
  5621.  blt .linegoingleft
  5622. ; addq #1,d0
  5623.  ext.l d2
  5624.  divs d3,d2
  5625.  move.w d2,d6
  5626.  swap d2
  5627.  
  5628. ; moveq #0,d6
  5629. ; sub.w d3,d2
  5630. ; blt.s .noco
  5631. ;.makeco
  5632. ; addq #1,d6
  5633. ; sub.w d3,d2
  5634. ; bge.s .makeco
  5635. ;.noco
  5636. ; add.w d3,d2
  5637.  
  5638.  move.w d3,d4
  5639.  move.w d3,d5
  5640.  subq #1,d5
  5641.  move.w d6,d1
  5642.  addq #1,d1
  5643.  
  5644.  move.w d1,a6
  5645.  move.w d2,a5
  5646.  
  5647.  moveq #0,d1
  5648.  move.w fbr,d1
  5649.  move.w sbr,d2
  5650.  sub.w d1,d2
  5651.  ext.l d2
  5652.  asl.w #8,d2
  5653.  asl.w #3,d2
  5654.  divs d3,d2 
  5655.  ext.l d2
  5656.  asl.l #5,d2
  5657.  swap d1
  5658.  
  5659. .pixlopright:
  5660.  
  5661.  swap d1
  5662.  move.w d1,(a4)+
  5663.  swap d1
  5664.  add.l d2,d1
  5665.  
  5666.  sub.w a5,d4
  5667.  bge.s .nobigstep
  5668.  add.w a6,d0
  5669.  add.w d3,d4
  5670.  move.w d0,(a3)+
  5671.  dbra d5,.pixlopright
  5672.  bra lineflatGOUR
  5673.  
  5674. .nobigstep
  5675.  add.w d6,d0
  5676.  move.w d0,(a3)+
  5677.  dbra d5,.pixlopright
  5678.  bra lineflatGOUR
  5679.  
  5680. .linegoingleft:
  5681. ; addq #1,d0
  5682.  neg.w d2
  5683.  
  5684.  ext.l d2
  5685.  divs d3,d2
  5686.  move.w d2,d6
  5687.  swap d2
  5688.  
  5689.  
  5690. ; moveq #0,d6
  5691. ; sub.w d3,d2
  5692. ; blt.s .nocol
  5693. ;.makecol
  5694. ; addq #1,d6
  5695. ; sub.w d3,d2
  5696. ; bge.s .makecol
  5697. ;.nocol
  5698. ; add.w d3,d2
  5699.  
  5700.  move.w d3,d4
  5701.  move.w d3,d5
  5702.  subq #1,d5
  5703.  move.w d6,d1
  5704.  addq #1,d1
  5705.  move.w d1,a6
  5706.  move.w d2,a5
  5707.  
  5708.  moveq #0,d1
  5709.  move.w fbr,d1
  5710.  move.w sbr,d2
  5711.  sub.w d1,d2
  5712.  ext.l d2
  5713.  asl.w #8,d2
  5714.  asl.w #3,d2
  5715.  divs d3,d2 
  5716.  ext.l d2
  5717.  asl.l #5,d2
  5718.  swap d1
  5719.  
  5720. .pixlopleft:
  5721.  
  5722.  swap d1
  5723.  move.w d1,(a4)+
  5724.  swap d1
  5725.  add.l d2,d1
  5726.  
  5727.  move.w d0,(a3)+
  5728.  sub.w a5,d4
  5729.  bge.s .nobigstepl
  5730.  sub.w a6,d0
  5731.  add.w d3,d4
  5732.  dbra d5,.pixlopleft
  5733.  bra lineflatGOUR
  5734.  
  5735. .nobigstepl
  5736.  sub.w d6,d0
  5737.  dbra d5,.pixlopleft
  5738.  
  5739. lineflatGOUR:
  5740.  
  5741. bothbehindGOUR:
  5742.  dbra d7,sideloopGOUR
  5743.  
  5744. pastsides:
  5745.  
  5746.  
  5747.  addq #2,a0
  5748.  
  5749.  move.w #104*4,linedir
  5750.  move.l frompt,a6
  5751.  add.l #104*4*41,a6
  5752.  move.w (a0)+,scaleval
  5753.  move.w (a0)+,whichtile
  5754.  move.w (a0)+,d6
  5755.  add.w ZoneBright,d6
  5756.  move.w d6,lighttype
  5757.  move.w above(pc),d6
  5758.  beq groundfloor
  5759. * on ceiling:
  5760.  move.w #-104*4,linedir
  5761.  suba.w #104*4,a6
  5762. groundfloor:
  5763.  
  5764.  move.w xoff,d6
  5765.  move.w zoff,d7
  5766.  add.w xwobxoff,d7
  5767.  add.w xwobzoff,d6
  5768.  swap d6
  5769.  swap d7
  5770.  clr.w d6
  5771.  clr.w d7
  5772.  move.w scaleval(pc),d3
  5773.  beq.s .samescale
  5774.  bgt.s .scaledown
  5775.  neg.w d3
  5776.  asr.l d3,d7
  5777.  asr.l d3,d6
  5778.  bra.s .samescale
  5779. .scaledown:
  5780.  asl.l d3,d6
  5781.  asl.l d3,d7
  5782. .samescale
  5783.  move.l d6,sxoff
  5784.  move.l d7,szoff
  5785.  bra pastscale 
  5786.  
  5787.  asr.l #3,d1
  5788.  asr.l #3,d2
  5789.  asr.l #2,d1
  5790.  asr.l #2,d2
  5791.  asr.l #1,d1
  5792.  asr.l #1,d2
  5793. scaleprogfrom
  5794.  nop
  5795.  nop
  5796.  asl.l #1,d1
  5797.  asl.l #1,d2
  5798.  asl.l #2,d1
  5799.  asl.l #2,d2
  5800.  asl.l #3,d1
  5801.  asl.l #3,d2
  5802.  
  5803. top: dc.w 0
  5804. bottom: dc.w 0
  5805. ypos: dc.l 0
  5806. nfloors: dc.w 0
  5807. lighttype: dc.w 0
  5808. above: dc.w 0 
  5809. linedir: dc.w 0
  5810. distaddr: dc.w 0
  5811.  
  5812. minz: dc.w 0
  5813. leftsidetab:
  5814.  ds.w 180
  5815. rightsidetab:
  5816.  ds.w 180
  5817. leftbrighttab:
  5818.  ds.w 180
  5819. rightbrighttab:
  5820.  ds.w 180
  5821.  
  5822. PointBrights:
  5823.  dc.l 0
  5824. CurrentPointBrights:
  5825.  ds.l 1000
  5826.  
  5827. movespd: dc.w 0
  5828. largespd: dc.l 0
  5829. disttobot: dc.w 0
  5830.  
  5831. pastscale:
  5832.  
  5833.  tst.b drawit(pc)
  5834.  beq dontdrawfloor
  5835.  
  5836.  move.l a0,-(a7)
  5837.  
  5838.  move.l #leftsidetab,a4
  5839.  move.w top(pc),d1
  5840.  
  5841.  move.w #39,d7
  5842.  sub.w d1,d7
  5843.  move.w d7,disttobot
  5844.  
  5845.  move.w bottom(pc),d7
  5846.  tst.w above
  5847.  beq.s clipfloor
  5848.  
  5849.  move.w #40,d3
  5850.  move.w d3,d4
  5851.  sub.w topclip,d3
  5852.  sub.w botclip,d4
  5853.  cmp.w d3,d1
  5854.  bge predontdrawfloor
  5855.  cmp.w d4,d7
  5856.  blt predontdrawfloor
  5857.  cmp.w d4,d1
  5858.  bge.s .nocliptoproof
  5859.  move.w d4,d1
  5860. .nocliptoproof
  5861.  cmp.w d3,d7
  5862.  blt doneclip
  5863.  move.w d3,d7
  5864.  bra doneclip
  5865.  
  5866. clipfloor:
  5867.  move.w botclip,d4
  5868.  sub.w #40,d4
  5869.  cmp.w d4,d1
  5870.  bge predontdrawfloor
  5871.  move.w topclip,d3
  5872.  sub.w #40,d3
  5873.  cmp.w d3,d1
  5874.  bge.s .nocliptopfloor
  5875.  move.w d3,d1
  5876. .nocliptopfloor 
  5877.  cmp.w d3,d7
  5878.  ble predontdrawfloor
  5879.  cmp.w d4,d7
  5880.  blt.s .noclipbotfloor
  5881.  move.w d4,d7
  5882. .noclipbotfloor:
  5883.  
  5884. doneclip:
  5885.  
  5886.  lea (a4,d1*2),a4
  5887. ; move.l #dists,a2
  5888.  move.w distaddr,d0
  5889.  muls #64,d0
  5890.  move.l d0,a2
  5891. ; muls #25,d0
  5892. ; adda.w d0,a2
  5893. ; lea (a2,d1*2),a2
  5894.  sub.w d1,d7
  5895.  ble predontdrawfloor 
  5896.  move.w d1,d0
  5897.  bne.s .notzero
  5898.  moveq #1,d0
  5899. .notzero
  5900.  muls linedir,d1
  5901.  add.l d1,a6
  5902.  move.l #floorscalecols,a1
  5903.  move.l LineToUse,a5
  5904.  
  5905.  tst.b gourfloor
  5906.  bne dogourfloor
  5907.  
  5908.  tst.b anyclipping
  5909.  beq dofloornoclip
  5910.  
  5911. dofloor:
  5912. ; move.w (a2)+,d0
  5913.  move.w leftclip(pc),d3
  5914.  move.w rightclip(pc),d4
  5915.  move.w rightsidetab-leftsidetab(a4),d2
  5916.  
  5917.  addq #1,d2
  5918.  cmp.w d3,d2
  5919.  ble.s nodrawline
  5920.  cmp.w d4,d2
  5921.  ble.s noclipright
  5922.  move.w d4,d2
  5923. noclipright:
  5924.  move.w (a4),d1
  5925.  cmp.w d4,d1
  5926.  bge.s nodrawline
  5927.  cmp.w d3,d1
  5928.  bge.s noclipleft
  5929.  move.w d3,d1
  5930. noclipleft:
  5931.  cmp.w d1,d2
  5932.  ble.s nodrawline
  5933.  
  5934.  move.w d1,leftedge
  5935.  move.w d2,rightedge
  5936.  
  5937. ; moveq #0,d1
  5938. ; moveq #0,d3
  5939. ; move.w leftbrighttab-leftsidetab(a4),d1
  5940. ; bge.s .okbl
  5941. ; moveq #0,d1
  5942. ;.okbl:
  5943.  
  5944. ; move.w rightbrighttab-leftsidetab(a4),d3
  5945. ; bge.s .okbr
  5946. ; moveq #0,d3
  5947. ;.okbr:
  5948.  
  5949. ; sub.w d1,d3
  5950. ; asl.w #8,d1
  5951. ; move.l d1,leftbright
  5952. ; swap d3
  5953. ; asr.l #5,d3
  5954. ; divs d5,d3
  5955. ; move.w d3,d5
  5956. ; muls.w d6,d5
  5957. ; asr.l #3,d5
  5958. ; clr.b d5
  5959. ; add.w d5,leftbright+2
  5960.  
  5961. ; ext.l d3
  5962. ; asl.l #5,d3
  5963. ; swap d3
  5964. ; asl.w #8,d3
  5965. ; move.l d3,brightspd
  5966.  
  5967.  move.l a6,a3
  5968.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  5969.  move.l a2,d7
  5970.  divs d0,d7
  5971.  move.w d7,d0
  5972.  jsr (a5)
  5973.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  5974. nodrawline
  5975.  sub.w #1,disttobot
  5976.  adda.w linedir(pc),a6
  5977.  addq #2,a4
  5978.  addq #1,d0
  5979.  subq #1,d7
  5980.  bgt dofloor
  5981.  
  5982. predontdrawfloor
  5983.  move.l (a7)+,a0
  5984.  
  5985. dontdrawfloor:
  5986.  
  5987.  CACHE_FREEZE_OFF d2
  5988.  rts
  5989.  
  5990. anyclipping: dc.w 0
  5991.  
  5992. dofloornoclip:
  5993. ; move.w (a2)+,d0
  5994.  move.w rightsidetab-leftsidetab(a4),d2
  5995.  addq #1,d2
  5996.  move.w (a4)+,d1
  5997.  move.w d1,leftedge
  5998.  move.w d2,rightedge
  5999.  
  6000. ; sub.w d1,d2
  6001.  
  6002. ; moveq #0,d1
  6003. ; moveq #0,d3
  6004. ; move.w leftbrighttab-leftsidetab(a4),d1
  6005. ; bge.s .okbl
  6006. ; moveq #0,d1
  6007. ;.okbl:
  6008.  
  6009. ; move.w rightbrighttab-leftsidetab(a4),d3
  6010. ; bge.s .okbr
  6011. ; moveq #0,d3
  6012. ;.okbr:
  6013.  
  6014. ; sub.w d1,d3
  6015. ; asl.w #8,d1
  6016. ; move.l d1,leftbright
  6017. ; swap d3
  6018. ; asr.l #5,d3
  6019. ; divs d2,d3
  6020. ; ext.l d3
  6021. ; asl.l #5,d3
  6022. ; swap d3
  6023. ; asl.w #8,d3
  6024. ; move.l d3,brightspd
  6025.  
  6026.  move.l a6,a3
  6027.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6028.  move.l a2,d7
  6029.  divs d0,d7
  6030.  move.w d7,d0
  6031.  jsr (a5)
  6032.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6033.  sub.w #1,disttobot
  6034.  adda.w linedir(pc),a6
  6035.  addq #1,d0
  6036.  subq #1,d7
  6037.  bgt dofloornoclip
  6038.  
  6039.  bra predontdrawfloor
  6040.  
  6041. dogourfloor:
  6042.  tst.b anyclipping
  6043.  beq dofloornoclipGOUR
  6044.  
  6045. dofloorGOUR:
  6046. ; move.w (a2)+,d0
  6047.  move.w leftclip(pc),d3
  6048.  move.w rightclip(pc),d4
  6049.  move.w rightsidetab-leftsidetab(a4),d2
  6050.  
  6051.  move.w d2,d5
  6052.  sub.w (a4),d5
  6053.  addq #1,d5
  6054.  moveq #0,d6
  6055.  
  6056.  addq #1,d2
  6057.  cmp.w d3,d2
  6058.  ble nodrawlineGOUR
  6059.  cmp.w d4,d2
  6060.  ble.s nocliprightGOUR
  6061.  move.w d4,d2
  6062. nocliprightGOUR:
  6063.  move.w (a4),d1
  6064.  cmp.w d4,d1
  6065.  bge nodrawlineGOUR
  6066.  cmp.w d3,d1
  6067.  bge.s noclipleftGOUR
  6068.  move.w d3,d6
  6069.  subq #1,d6
  6070.  sub.w d1,d6
  6071.  move.w d3,d1
  6072. noclipleftGOUR:
  6073.  cmp.w d1,d2
  6074.  ble nodrawlineGOUR
  6075.  
  6076.  move.w d1,leftedge
  6077.  move.w d2,rightedge
  6078.  
  6079.  move.l a2,d2
  6080.  divs d0,d2
  6081.  move.w d2,dst
  6082.  asr.w #7,d2
  6083. ; addq #5,d2
  6084. ; add.w lighttype,d2
  6085.  
  6086.  moveq #0,d1
  6087.  moveq #0,d3
  6088.  move.w leftbrighttab-leftsidetab(a4),d1
  6089.  add.w d2,d1
  6090.  bge.s .okbl
  6091.  moveq #0,d1
  6092. .okbl:
  6093.  asr.w #1,d1
  6094.  cmp.w #14,d1
  6095.  ble.s .okdl
  6096.  move.w #14,d1
  6097. .okdl:
  6098.  
  6099.  move.w rightbrighttab-leftsidetab(a4),d3
  6100.  add.w d2,d3
  6101.  bge.s .okbr
  6102.  moveq #0,d3
  6103. .okbr:
  6104.  asr.w #1,d3
  6105.  cmp.w #14,d3
  6106.  ble.s .okdr
  6107.  move.w #14,d3
  6108. .okdr:
  6109.  
  6110.  sub.w d1,d3
  6111.  asl.w #8,d1
  6112.  move.l d1,leftbright
  6113.  swap d3
  6114.  tst.l d3
  6115.  bgt.s .OKITSPOSALREADY 
  6116.  neg.l d3
  6117.  asr.l #5,d3
  6118.  divs d5,d3
  6119.  neg.w d3
  6120.  bra.s .OKNOWITSNEG
  6121.  
  6122. .OKITSPOSALREADY
  6123.  asr.l #5,d3
  6124.  divs d5,d3
  6125. .OKNOWITSNEG
  6126.  muls d3,d6
  6127.  add.w #256*8,d6
  6128.  asr.w #3,d6
  6129.  clr.b d6
  6130.  add.w d6,leftbright+2
  6131.  
  6132.  ext.l d3
  6133.  asl.l #5,d3
  6134.  swap d3
  6135.  asl.w #8,d3
  6136.  move.l d3,brightspd
  6137.  
  6138.  move.l a6,a3
  6139.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6140.  move.w dst,d0
  6141.  lea floorscalecols,a1
  6142.  move.l floortile,a0
  6143.  adda.w whichtile,a0
  6144.  jsr pastfloorbright
  6145.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6146. nodrawlineGOUR
  6147.  
  6148.  sub.w #1,disttobot
  6149.  
  6150.  adda.w linedir(pc),a6
  6151.  addq #2,a4
  6152.  addq #1,d0
  6153.  subq #1,d7
  6154.  bgt dofloorGOUR
  6155.  
  6156. predontdrawfloorGOUR
  6157.  move.l (a7)+,a0
  6158.  
  6159. dontdrawfloorGOUR:
  6160.  
  6161.  CACHE_FREEZE_OFF d2
  6162.  rts
  6163.  
  6164. dofloornoclipGOUR:
  6165. ; move.w (a2)+,d0
  6166.  move.w rightsidetab-leftsidetab(a4),d2
  6167.  addq #1,d2
  6168.  move.w (a4),d1
  6169.  move.w d1,leftedge
  6170.  move.w d2,rightedge
  6171.  
  6172.  sub.w d1,d2
  6173.  
  6174.  move.l a2,d6
  6175.  divs d0,d6
  6176.  move.w d6,d5
  6177.  asr.w #7,d5
  6178. ; addq #5,d5
  6179. ; add.w lighttype,d5
  6180.  
  6181.  moveq #0,d1
  6182.  moveq #0,d3
  6183.  move.w leftbrighttab-leftsidetab(a4),d1
  6184.  add.w d5,d1
  6185.  bge.s .okbl
  6186.  moveq #0,d1
  6187. .okbl:
  6188.  asr.w #1,d1
  6189.  cmp.w #14,d1
  6190.  ble.s .okdl
  6191.  move.w #14,d1
  6192. .okdl:
  6193.  
  6194.  move.w rightbrighttab-leftsidetab(a4),d3
  6195.  add.w d5,d3
  6196.  bge.s .okbr
  6197.  moveq #0,d3
  6198. .okbr:
  6199.  asr.w #1,d3
  6200.  cmp.w #14,d3
  6201.  ble.s .okdr
  6202.  move.w #14,d3
  6203. .okdr:
  6204.  
  6205.  sub.w d1,d3
  6206.  asl.w #8,d1
  6207.  move.l d1,leftbright
  6208.  swap d3
  6209.  asr.l #5,d3
  6210.  divs d2,d3
  6211.  ext.l d3
  6212.  asl.l #5,d3
  6213.  swap d3
  6214.  asl.w #8,d3
  6215.  move.l d3,brightspd
  6216.  
  6217.  
  6218.  move.l a6,a3
  6219.  movem.l d0/d7/a2/a4/a5/a6,-(a7)
  6220.  move.w d6,d0
  6221.  move.w d0,dst
  6222.  lea floorscalecols,a1
  6223.  move.l floortile,a0
  6224.  adda.w whichtile,a0
  6225.  jsr pastfloorbright
  6226.  movem.l (a7)+,d0/d7/a2/a4/a5/a6
  6227.  sub.w #1,disttobot
  6228.  adda.w linedir(pc),a6
  6229.  addq #2,a4
  6230.  addq #1,d0
  6231.  subq #1,d7
  6232.  bgt dofloornoclipGOUR
  6233.  
  6234.  bra predontdrawfloorGOUR
  6235.  
  6236.  
  6237.  
  6238. dists:
  6239. ; incbin "floordists"
  6240. drawit: dc.w 0
  6241.  
  6242. LineToUse: dc.l 0
  6243.  
  6244. ***************************
  6245. * Right then, time for the floor
  6246. * routine...
  6247. * For test purposes, give it
  6248. * a3 = point to screen
  6249. * d0= z distance away
  6250. * and sinval+cosval must be set up.
  6251. ***************************
  6252.  
  6253. BLACKFLOOR:
  6254.  moveq #0,d0
  6255.  bra.s DOBLACK
  6256.  
  6257. SimpleFloorLine:
  6258.  
  6259.  CACHE_OFF d2
  6260.  
  6261.  move.l #doacrossline,a1
  6262.  move.w leftedge(pc),d1
  6263.  move.w rightedge(pc),d3
  6264.  sub.w d1,d3
  6265.  lea (a1,d1.w*4),a1
  6266.  move.w (a1,d3.w*4),d4
  6267.  move.w #$4e75,(a1,d3.w*4)
  6268.  
  6269.  tst.b CLRNOFLOOR
  6270.  bne.s BLACKFLOOR
  6271.  
  6272.  move.l #PLAINSCALE,a2
  6273.  
  6274.  move.w d0,d2
  6275.  move.w lighttype,d1
  6276.  asr.w #8,d2
  6277.  add.w #5,d1
  6278.  add.w d2,d1
  6279.  bge.s .fixedbright
  6280.  moveq #0,d1
  6281. .fixedbright:
  6282.  cmp.w #28,d1
  6283.  ble.s .smallbright
  6284.  move.w #28,d1
  6285. .smallbright:
  6286.  lea (a2,d1.w*2),a2
  6287.  
  6288.  move.w whichtile,d0
  6289.  move.w d0,d1
  6290.  and.w #$3,d1
  6291.  and.w #$300,d0
  6292.  lsl.b #6,d1
  6293.  move.b d1,d0
  6294.  move.w d0,tstwhich
  6295.  move.w (a2,d0.w),d0
  6296.  
  6297. DOBLACK:
  6298.  jsr (a1)
  6299.  move.w d4,(a1,d3.w*4)
  6300.  
  6301.  CACHE_ON d2
  6302.  
  6303.  rts
  6304.  
  6305. tstwhich: dc.w 0
  6306. whichtile: dc.w 0
  6307.   
  6308. PLAINSCALE: incbin "ab3:includes/plainscale"
  6309.   
  6310. storeit: dc.l 0
  6311.  
  6312. doacrossline:
  6313. val SET 0
  6314.  REPT 32
  6315.  move.w d0,val(a3)
  6316. val SET val+4
  6317.  ENDR
  6318. val SET val+4
  6319.  REPT 32
  6320.  move.w d0,val(a3)
  6321. val SET val+4
  6322.  ENDR
  6323. val SET val+4
  6324.  REPT 32
  6325.  move.w d0,val(a3)
  6326. val SET val+4
  6327.  ENDR
  6328.  rts
  6329.  
  6330.  
  6331. leftedge: dc.w 0
  6332. rightedge: dc.w 0
  6333.  
  6334. rndpt: dc.l rndtab
  6335.  
  6336.  
  6337. dst: dc.w 0
  6338.  
  6339. FloorLine:
  6340.  
  6341.  move.l floortile,a0
  6342.  adda.w whichtile,a0
  6343.  move.w lighttype,d1
  6344.  move.w d0,dst
  6345.  move.w d0,d2
  6346. *********************
  6347. * Old version
  6348.  asr.w #8,d2
  6349.  add.w #5,d1
  6350. *********************
  6351. ; asr.w #3,d2
  6352. ; sub.w #4,d2
  6353. ; cmp.w #6,d2
  6354. ; blt.s flbrbr
  6355. ; move.w #6,d2
  6356. ;flbrbr:
  6357. *********************
  6358.  add.w d2,d1
  6359.  bge.s .fixedbright
  6360.  moveq #0,d1
  6361. .fixedbright:
  6362.  cmp.w #28,d1
  6363.  ble.s .smallbright
  6364.  move.w #28,d1
  6365. .smallbright:
  6366.  lea floorscalecols,a1
  6367.  add.l floorbright(pc,d1.w*4),a1
  6368.  bra pastfloorbright
  6369.  
  6370. ConstCol: dc.w 0
  6371.  
  6372. BumpLine:
  6373.  
  6374.  tst.b smoothbumps
  6375.  beq.s Chunky
  6376.  
  6377.  move.l #SmoothTile,a0
  6378.  lea Smoothscalecols,a1
  6379.  bra pastast
  6380.  
  6381. Chunky:
  6382.  
  6383.  moveq #0,d2
  6384.  move.l #Bumptile,a0
  6385.  move.w whichtile,d2
  6386.  adda.w d2,a0
  6387.  ror.l #2,d2
  6388.  lsr.w #6,d2
  6389.  rol.l #2,d2
  6390.  and.w #15,d2
  6391.  move.l #ConstCols,a1
  6392.  move.w (a1,d2.w*2),ConstCol
  6393.  lea Bumpscalecols,a1
  6394.  
  6395. pastast:
  6396.  move.w lighttype,d1
  6397.  
  6398.  move.w d0,dst
  6399.  
  6400.  move.w d0,d2
  6401. *********************
  6402. * Old version
  6403.  asr.w #8,d2
  6404.  add.w #5,d1
  6405. *********************
  6406. ; asr.w #3,d2
  6407. ; sub.w #4,d2
  6408. ; cmp.w #6,d2
  6409. ; blt.s flbrbr
  6410. ; move.w #6,d2
  6411. ;flbrbr:
  6412. *********************
  6413.  add.w d2,d1
  6414.  bge.s .fixedbright
  6415.  moveq #0,d1
  6416. .fixedbright:
  6417.  cmp.w #28,d1
  6418.  ble.s .smallbright
  6419.  move.w #28,d1
  6420. .smallbright:
  6421.  add.l floorbright(pc,d1.w*4),a1
  6422.  bra pastfloorbright
  6423.  
  6424.  
  6425. floorbright:
  6426.  dc.l 512*0
  6427.  dc.l 512*1
  6428.  dc.l 512*1
  6429.  dc.l 512*2
  6430.  dc.l 512*2
  6431.  
  6432.  dc.l 512*3
  6433.  dc.l 512*3
  6434.  dc.l 512*4
  6435.  dc.l 512*4
  6436.  dc.l 512*5
  6437.  
  6438.  dc.l 512*5
  6439.  dc.l 512*6
  6440.  dc.l 512*6
  6441.  dc.l 512*7
  6442.  dc.l 512*7
  6443.  
  6444.  dc.l 512*8
  6445.  dc.l 512*8
  6446.  dc.l 512*9
  6447.  dc.l 512*9
  6448.  dc.l 512*10
  6449.  
  6450.  dc.l 512*10
  6451.  dc.l 512*11
  6452.  dc.l 512*11
  6453.  dc.l 512*12
  6454.  dc.l 512*12
  6455.  
  6456.  dc.l 512*13
  6457.  dc.l 512*13
  6458.  dc.l 512*14
  6459.  dc.l 512*14
  6460.  
  6461. widthleft: dc.w 0
  6462. scaleval: dc.w 0
  6463. sxoff: dc.l 0
  6464. szoff: dc.l 0
  6465. xoff34: dc.w 0
  6466. zoff34: dc.w 0
  6467. scosval: dc.w 0
  6468. ssinval: dc.w 0
  6469.  
  6470.  
  6471. floorsetbright:
  6472.  move.l #walltiles,a0
  6473.  
  6474. pastfloorbright
  6475.  
  6476.  move.w d0,d1
  6477.  muls cosval,d1    ; change in x across whole width
  6478.  move.w d0,d2
  6479.  muls sinval,d2    ; change in z across whole width
  6480.  neg.l d2
  6481. scaleprog:
  6482.  move.w scaleval(pc),d3
  6483.  beq.s .samescale
  6484.  bgt.s .scaledown
  6485.  neg.w d3
  6486.  asr.l d3,d1
  6487.  asr.l d3,d2
  6488.  bra.s .samescale
  6489. .scaledown:
  6490.  asl.l d3,d1
  6491.  asl.l d3,d2
  6492. .samescale
  6493.  
  6494.  move.l d1,d3 ;    z cos
  6495.  move.l d3,d6
  6496.  move.l d3,d5
  6497.  asr.l #1,d6
  6498.  add.l d6,d3
  6499.  asr.l #1,d3
  6500.  
  6501.  move.l d2,d4    ; z sin
  6502.  move.l d4,d6
  6503.  asr.l #1,d6
  6504.  add.l d4,d6
  6505.  add.l d3,d4
  6506.  neg.l d4    ; start x
  6507.  
  6508.  asr.l #1,d6    ; zsin/2
  6509.  sub.l d6,d5    ; start z
  6510.  
  6511.  add.l sxoff,d4
  6512.  add.l szoff,d5
  6513.  
  6514.  moveq #0,d6
  6515.  move.w leftedge(pc),d6
  6516.  beq.s nomultleft
  6517.  
  6518.  move.l d1,a4
  6519.  move.l d2,a5
  6520.  
  6521.  muls.l d6,d3:d1
  6522.  asr.l #6,d1
  6523.  add.l d1,d4
  6524.  
  6525.  muls.l d6,d3:d2
  6526.  asr.l #6,d2
  6527.  add.l d2,d5
  6528.  move.l a4,d1
  6529.  move.l a5,d2
  6530.  
  6531. nomultleft:
  6532.  
  6533.  move.w d4,startsmoothx
  6534.  move.w d5,startsmoothz
  6535.  
  6536.  swap d4
  6537.  asr.l #8,d5
  6538. ; add.w szoff,d5
  6539. ; add.w sxoff,d4
  6540.  and.w #63,d4
  6541.  and.w #63*256,d5
  6542.  move.b d4,d5
  6543.  
  6544.  asr.l #6,d1
  6545.  asr.l #6,d2
  6546.  move.w d1,a4
  6547.  move.w d2,a5
  6548.  asr.l #8,d2
  6549.  and.w #%0011111100000000,d2
  6550.  swap d1
  6551.  add.w d1,d2
  6552.  move.w #%11111100111111,d1
  6553.  and.w d1,d5
  6554.  swap d5
  6555.  move.w startsmoothz,d5
  6556.  swap d5
  6557.  swap d2
  6558.  move.w a5,d2
  6559.  swap d2
  6560.  
  6561. ***********************************
  6562.  
  6563.  move.w d6,a2
  6564.  move.l d2,d6
  6565.  add.w #256,d6
  6566.  
  6567.  moveq #0,d0
  6568.  
  6569.  tst.w a2
  6570.  beq startatleftedge
  6571.  
  6572.  move.w widthleft(pc),d4
  6573.  
  6574.  move.w rightedge(pc),d3
  6575.  
  6576.  cmp.w #31,a2
  6577.  bgt.s notinfirststrip
  6578.  lea (a3,a2.w*4),a3
  6579.  cmp.w #32,d3
  6580.  ble.s allinfirststrip
  6581.  move.w #32,d7
  6582.  sub.w d7,d3
  6583.  sub.w a2,d7
  6584.  bra intofirststrip
  6585.  
  6586. allinfirststrip
  6587.  sub.w a2,d3
  6588.  move.w d3,d7
  6589.  move.w #0,d4
  6590.  bra allintofirst
  6591.  
  6592. notinfirststrip:
  6593.  sub.w #32,a2
  6594.  sub.w #32,d3
  6595.  adda.w #33*4,a3
  6596.  cmp.w #31,a2
  6597.  bgt.s notstartinsec
  6598.  lea (a3,a2.w*4),a3
  6599.  cmp.w #32,d3
  6600.  ble.s allinsecstrip
  6601.  move.w #32,d7
  6602.  sub.w d7,d3
  6603.  sub.w a2,d7
  6604.  move.w d3,d4
  6605.  bra allintofirst
  6606.  
  6607. allinsecstrip
  6608.  sub.w a2,d3
  6609.  move.w d3,d7
  6610.  move.w #0,d4
  6611.  bra allintofirst
  6612.  rts
  6613.  
  6614. prot8: dc.w 0
  6615.  
  6616. notstartinsec:
  6617.  sub.w #32,a2
  6618.  sub.w #32,d3
  6619.  adda.w #33*4,a3
  6620.  lea (a3,a2.w*4),a3
  6621.  cmp.w #32,d3
  6622.  ble.s allinthirdstrip
  6623.  move.w #32,d7
  6624.  sub.w d7,d3
  6625.  sub.w a2,d7
  6626.  move.w d3,d4
  6627.  bra allintofirst
  6628.  rts
  6629.  
  6630. allinthirdstrip
  6631.  sub.w a2,d3
  6632.  move.w d3,d7
  6633.  move.w #0,d4
  6634.  bra allintofirst
  6635.  rts
  6636.  
  6637. startatleftedge:
  6638.  
  6639.  move.w rightedge(pc),d3
  6640.  sub.w a2,d3
  6641.  
  6642.  move.w d3,d7
  6643.  cmp.w #32,d7
  6644.  ble.s .notoowide
  6645.  move.w #32,d7
  6646. .notoowide:
  6647.  sub.w d7,d3
  6648. intofirststrip:
  6649.  
  6650.  move.w d3,d4
  6651. allintofirst:
  6652.  
  6653.  move.w startsmoothx,d3
  6654.  
  6655. tstwat:
  6656.  
  6657.  tst.b gourfloor
  6658.  bne gouraudfloor
  6659.  
  6660.  tst.b usewater
  6661.  bne texturedwater
  6662.  
  6663.  
  6664. ******************************
  6665. * BumpMap the floor/ceiling! *
  6666.  tst.b usebumps
  6667.  bne.s BumpMap
  6668. ******************************
  6669.  
  6670. ordinary:
  6671.  moveq #0,d0
  6672.  
  6673.  dbra d7,acrossscrn
  6674.  rts
  6675.  
  6676. usebumps: dc.w $0
  6677. smoothbumps: dc.w $0
  6678. gourfloor: dc.w 0
  6679.  
  6680.  include "ab3:source/bumpmap.s"
  6681.  
  6682.  CNOP 0,4
  6683. backbefore:
  6684.  and.w d1,d5
  6685.  move.b (a0,d5.w*4),d0
  6686.  add.w a4,d3
  6687.  move.w (a1,d0.w*2),(a3)
  6688.  addq #4,a3
  6689.  addx.l d6,d5
  6690.  dbcs d7,acrossscrn
  6691.  dbcc d7,backbefore
  6692.  bra.s past1
  6693.  
  6694. acrossscrn:
  6695.  and.w d1,d5
  6696.  move.b (a0,d5.w*4),d0
  6697.  add.w a4,d3
  6698.  move.w (a1,d0.w*2),(a3)
  6699.  addq #4,a3
  6700.  addx.l d2,d5
  6701.  dbcs d7,acrossscrn
  6702.  dbcc d7,backbefore
  6703. past1:
  6704.  bcc.s gotoacross
  6705.  
  6706.  move.w d4,d7
  6707.  bne.s .notdoneyet
  6708.  CACHE_FREEZE_ON d2
  6709.  rts
  6710. .notdoneyet:
  6711.  
  6712.  cmp.w #32,d7
  6713.  ble.s .notoowide
  6714.  move.w #32,d7
  6715. .notoowide
  6716.  sub.w d7,d4  
  6717.  addq #4,a3
  6718.  
  6719.  dbra d7,backbefore
  6720.  CACHE_FREEZE_ON d2
  6721.  rts
  6722.  
  6723.  
  6724. gotoacross:
  6725.  
  6726.  move.w d4,d7
  6727.  bne.s .notdoneyet
  6728.  CACHE_FREEZE_ON d2
  6729.  rts
  6730. .notdoneyet:
  6731.  
  6732.  cmp.w #32,d7
  6733.  ble.s .notoowide
  6734.  move.w #32,d7
  6735. .notoowide
  6736.  sub.w d7,d4  
  6737.  addq #4,a3
  6738.  
  6739.  dbra d7,acrossscrn
  6740.  CACHE_FREEZE_ON d2
  6741.  rts
  6742.  
  6743. leftbright: dc.l 0
  6744. brightspd: dc.l 0
  6745.  
  6746. gouraudfloor:
  6747.  move.l leftbright,d0
  6748.  move.l brightspd,d1
  6749.  dbra d7,acrossscrngour
  6750.  rts
  6751.  
  6752.  CNOP 0,4
  6753. backbeforegour:
  6754.  and.w #63*256+63,d5
  6755.  move.b (a0,d5.w*4),d0
  6756.  add.l d1,d0
  6757.  bcc.s .nomoreb
  6758.  add.w #256,d0
  6759. .nomoreb:
  6760.  add.w a4,d3
  6761.  move.w (a1,d0.w*2),(a3)
  6762.  addq #4,a3 
  6763.  addx.l d6,d5
  6764.  dbcs d7,acrossscrngour
  6765.  dbcc d7,backbeforegour
  6766.  bra.s past1gour
  6767.  
  6768. acrossscrngour:
  6769.  and.w #63*256+63,d5
  6770.  move.b (a0,d5.w*4),d0
  6771.  add.l d1,d0
  6772.  bcc.s .nomoreb
  6773.  add.w #256,d0
  6774. .nomoreb:
  6775.  add.w a4,d3
  6776.  move.w (a1,d0.w*2),(a3)
  6777.  addq #4,a3
  6778.  addx.l d2,d5
  6779.  dbcs d7,acrossscrngour
  6780.  dbcc d7,backbeforegour
  6781. past1gour:
  6782.  bcc.s gotoacrossgour
  6783.  
  6784.  move.w d4,d7
  6785.  bne.s .notdoneyet
  6786.  move.l d0,leftbright
  6787.  
  6788.  CACHE_FREEZE_ON d2
  6789.  rts
  6790. .notdoneyet:
  6791.  
  6792.  cmp.w #32,d7
  6793.  ble.s .notoowide
  6794.  move.w #32,d7
  6795. .notoowide
  6796.  sub.w d7,d4  
  6797.  addq #4,a3
  6798.  
  6799.  dbra d7,backbeforegour
  6800.  CACHE_FREEZE_ON d2
  6801.  rts
  6802.  
  6803.  
  6804. gotoacrossgour:
  6805.  
  6806.  move.w d4,d7
  6807.  bne.s .notdoneyet
  6808.  CACHE_FREEZE_ON d2
  6809.  rts
  6810. .notdoneyet:
  6811.  
  6812.  cmp.w #32,d7
  6813.  ble.s .notoowide
  6814.  move.w #32,d7
  6815. .notoowide
  6816.  sub.w d7,d4  
  6817.  addq #4,a3
  6818.  
  6819.  dbra d7,acrossscrngour
  6820.  CACHE_FREEZE_ON d2
  6821.  rts
  6822.  
  6823.  
  6824. waterpt: dc.l waterlist
  6825.  
  6826. waterlist:
  6827.  dc.l waterfile
  6828.  dc.l waterfile+2
  6829.  dc.l waterfile+256
  6830.  dc.l waterfile+256+2
  6831.  dc.l waterfile+512
  6832.  dc.l waterfile+512+2
  6833.  dc.l waterfile+768
  6834.  dc.l waterfile+768+2
  6835. ; dc.l waterfile+768
  6836. ; dc.l waterfile+512+2
  6837. ; dc.l waterfile+512
  6838. ; dc.l waterfile+256+2
  6839. ; dc.l waterfile+256
  6840. ; dc.l waterfile+2
  6841. endwaterlist:
  6842.  
  6843. watertouse: dc.l waterfile
  6844.  
  6845. wtan: dc.w 0
  6846. wateroff: dc.w 0
  6847.  
  6848. texturedwater:
  6849.  
  6850.  add.w wateroff,d5
  6851.  
  6852.  move.l #brightentab,a1
  6853.  move.w dst,d0
  6854.  clr.b d0
  6855.  
  6856.  add.w d0,d0
  6857.  cmp.w #12*512,d0
  6858.  blt.s .notoowater
  6859.  move.w #12*512,d0
  6860.  
  6861.  
  6862. .notoowater:
  6863.   
  6864.  adda.w d0,a1
  6865.  
  6866.  move.w dst,d0
  6867.  asl.w #7,d0
  6868.  add.w wtan,d0
  6869.  and.w #8191,d0
  6870.  move.l #SineTable,a0
  6871.  move.w (a0,d0.w),d0
  6872.  ext.l d0
  6873.  
  6874.  move.w dst,d3
  6875.  add.w #300,d3
  6876.  divs d3,d0
  6877.  asr.w #6,d0
  6878.  addq #2,d0
  6879.  cmp.w disttobot,d0
  6880.  blt.s oknotoffbototot
  6881.  
  6882.  move.w disttobot,d0
  6883.  subq #1,d0
  6884.  
  6885. oknotoffbototot
  6886.  
  6887. ; move.w dst,d3
  6888. ; asr.w #7,d3
  6889. ; add.w d3,d0
  6890.  
  6891.  muls #104*4,d0
  6892.  tst.w above
  6893.  beq.s nonnnnneg
  6894.  neg.l d0
  6895.  
  6896. nonnnnneg:
  6897.  
  6898.  move.l d0,a6
  6899.  
  6900.  move.l watertouse,a0
  6901.  
  6902.  move.w startsmoothx,d3
  6903.  dbra d7,acrossscrnw
  6904.  rts
  6905.  
  6906. backbeforew:
  6907.  and.w d1,d5
  6908.  move.w (a0,d5.w*4),d0
  6909.  move.b 1(a3,a6.w),d0
  6910.  move.w (a1,d0.w*2),(a3)
  6911.  addq #4,a3
  6912.  add.w a4,d3
  6913.  addx.l d6,d5
  6914.  dbcs d7,acrossscrnw
  6915.  dbcc d7,backbeforew
  6916.  bcc.s past1w
  6917.  add.w #256,d5 
  6918.  bra.s past1w
  6919.  
  6920. acrossscrnw:
  6921.  and.w d1,d5
  6922.  move.w (a0,d5.w*4),d0
  6923.  move.b 1(a3,a6.w),d0
  6924.  move.w (a1,d0.w*2),(a3)
  6925.  addq #4,a3
  6926.  add.w a4,d3
  6927.  addx.l d2,d5
  6928.  dbcs d7,acrossscrnw
  6929.  dbcc d7,backbeforew
  6930.  bcc.s past1w
  6931.  add.w #256,d5 
  6932. past1w:
  6933.  
  6934.  move.w d4,d7
  6935.  bne.s .notdoneyet
  6936.  rts
  6937. .notdoneyet:
  6938.  
  6939.  cmp.w #32,d7
  6940.  ble.s .notoowide
  6941.  move.w #32,d7
  6942. .notoowide
  6943.  sub.w d7,d4  
  6944.  addq #4,a3
  6945.  
  6946.  dbra d7,acrossscrnw
  6947.  CACHE_FREEZE_ON d2
  6948.  rts
  6949.  
  6950. usewater: dc.w 0
  6951.  dc.w 0
  6952. startsmoothx: dc.w 0
  6953.  dc.w 0
  6954. startsmoothz: dc.w 0
  6955.  
  6956. ********************************
  6957. *
  6958.  include "AB3:source/ObjDraw3.chipram"
  6959. *
  6960. ********************************
  6961.  
  6962. numframes:
  6963.  dc.w 0
  6964.  
  6965. alframe: dc.l 0
  6966.  
  6967. alan:
  6968.  dcb.l 8,0
  6969.  dcb.l 8,1
  6970.  dcb.l 8,2
  6971.  dcb.l 8,3
  6972. endalan:
  6973.  
  6974. alanptr: dc.l alan
  6975.  
  6976. Time2: dc.l 0
  6977. dispco:
  6978.  dc.w 0
  6979.  
  6980. KInt_Init    ;VBR Assumed $0
  6981.         move.l $68.w,OLDKINT
  6982.         Move.l    #KInt_Main,$68.w    Install Interrupt 
  6983.         And.b    #$3f,$bfe201        Set Timers
  6984.         Move.b    #$7f,$bfed01
  6985.         Move.b    $bfed01,d0
  6986.         Move.b    #$88,$bfed01
  6987.         St.b    KInt_CCode        
  6988.         Move.b    #$a0,$bfee01        Start Timey Thing
  6989.         Rts                And return
  6990.  
  6991. OLDKINT: dc.l 0
  6992.  
  6993.  
  6994. KInt_Main    
  6995.         Movem.l    d0/d1/a0/a1/a6,-(a7)    Stack everything
  6996.         Move.w    #8,$dff09a        Temp Disable Int.
  6997.         Move.w    $dff01e,d0        Intreqr
  6998.         And.w    #8,d0            Mask Out All X^ K_Int
  6999.     Beq    KInt_End            Not Keyboard Interrupt
  7000.         Lea    $bfed01,a6
  7001.         Move.w    #$8,$dff09c        Clear Int.Request
  7002.         Move.b    -$100(a6),d0        Move Raw Keyboard value
  7003.         Ror.b    #1,d0            Roll to correct
  7004.         Not.b    d0            
  7005.         Move.b    d0,KInt_CCode        Save Corrected Keycode
  7006. .HandShake    Move.b    #8,(a6)
  7007.         Move.b    #7,-$900(a6)
  7008.         Move.b    #0,-$800(a6)
  7009.         Move.b    #0,-$100(a6)
  7010.         Move.b    #$d1,$100(a6)        
  7011.         Tst.b    (a6)    
  7012. .wait        Btst    #0,(a6)
  7013.     Beq.s    .wait
  7014.         Move.b    #$a0,$100(a6)        
  7015.         Move.b    (a6),d0        
  7016.         Move.b    #$88,(a6)
  7017.         Lea    KeyMap,a1
  7018.         Moveq.w    #0,d0
  7019.         Move.b    KInt_CCode(pc),d0
  7020.     Bmi.s    KInt_KeyUp            neg if up 
  7021.  
  7022. KInt_KeyDown
  7023.         st (a1,d0.w)
  7024.         move.b d0,lastpressed
  7025.     Bra    KInt_End
  7026.  
  7027. KInt_KeyUp
  7028.         And.w    #$7f,d0            Make code Positive
  7029.         clr.b (a1,d0.w)
  7030. KInt_End    Movem.l    (a7)+,d0/d1/a0/a1/a6    Unstack Everything
  7031.     
  7032.         Move.w    #$8008,$dff09a        Re-enable Int.
  7033.         Rte
  7034.  
  7035. lastpressed:    dc.b 0
  7036. KInt_CCode    Ds.b    1
  7037. KInt_Askey    Ds.b    1
  7038. KInt_OCode    Ds.w    1
  7039.  
  7040.  
  7041. OldSpace: dc.b 0
  7042. SpaceTapped: dc.b 0
  7043. PLR1_SPCTAP: dc.b 0
  7044. PLR2_SPCTAP: dc.b 0
  7045. PLR1_Ducked: dc.b 0
  7046. PLR2_Ducked: dc.b 0
  7047.  even
  7048.  
  7049.  include "ab3:source/PLR1CONTROL.s"
  7050.  include "ab3:source/PLR2CONTROL.s"
  7051.  include "ab3:source/FALL.s"
  7052.  
  7053. prot7: dc.w 0
  7054.  
  7055. GOTTOSEND: dc.w 0
  7056.  
  7057. OtherInter:
  7058.  move.w #$0010,$dff000+intreq
  7059.  movem.l d0-d7/a0-a6,-(a7)
  7060.  bra.s justshake
  7061.  
  7062. Chan0inter:
  7063.  
  7064.  move.w #$0010,$dff000+intreq
  7065.  
  7066.  tst.b doanything
  7067.  bne.s dosomething
  7068.  rte
  7069.  
  7070. dosomething:
  7071.  
  7072.  
  7073.  addq.w #1,FramesToDraw
  7074.  movem.l d0-d7/a0-a6,-(a7)
  7075.  
  7076. ; jsr INITREC
  7077. ; jsr RECEIVE
  7078.  
  7079. ; tst.l BUFFER
  7080. ; beq.s justshake
  7081. ; st GOTTOSEND
  7082. ; move.l #OtherInter,$6c
  7083.  
  7084. justshake:
  7085.  
  7086.  cmp.b #'b',Prefsfile+3
  7087.  bne.s .noback
  7088.  jsr mt_music
  7089. .noback:
  7090.  
  7091.  bra dontshowtime
  7092.  
  7093.  tst.b oktodisplay
  7094.  beq dontshowtime
  7095.  clr.b oktodisplay
  7096.  subq.w #1,dispco
  7097.  bgt dontshowtime
  7098.  move.w #10,dispco
  7099.  
  7100.  move.l #TimerScr+10,a0
  7101.  move.l TimeCount,d0
  7102.  bge.s timenotneg
  7103.  move.l #1111*256,d0
  7104. timenotneg:
  7105.  asr.l #8,d0
  7106.  move.l #digits,a1
  7107.  move.w #7,d2
  7108. digitlop
  7109.  divs #10,d0
  7110.  swap d0
  7111.  lea (a1,d0.w*8),a2
  7112.  move.b (a2)+,(a0)
  7113.  move.b (a2)+,24(a0)
  7114.  move.b (a2)+,24*2(a0)
  7115.  move.b (a2)+,24*3(a0)
  7116.  move.b (a2)+,24*4(a0)
  7117.  move.b (a2)+,24*5(a0)
  7118.  move.b (a2)+,24*6(a0)
  7119.  move.b (a2)+,24*7(a0)
  7120.  subq #1,a0
  7121.  swap d0
  7122.  ext.l d0
  7123.  dbra d2,digitlop
  7124.  
  7125.  move.l #TimerScr+10+24*10,a0
  7126.  move.l NumTimes,d0
  7127.  move.l #digits,a1
  7128.  move.w #3,d2
  7129. digitlop2
  7130.  divs #10,d0
  7131.  swap d0
  7132.  lea (a1,d0.w*8),a2
  7133.  move.b (a2)+,(a0)
  7134.  move.b (a2)+,24(a0)
  7135.  move.b (a2)+,24*2(a0)
  7136.  move.b (a2)+,24*3(a0)
  7137.  move.b (a2)+,24*4(a0)
  7138.  move.b (a2)+,24*5(a0)
  7139.  move.b (a2)+,24*6(a0)
  7140.  move.b (a2)+,24*7(a0)
  7141.  subq #1,a0
  7142.  swap d0
  7143.  ext.l d0
  7144.  dbra d2,digitlop2
  7145.  
  7146.  move.l #TimerScr+10+24*20,a0
  7147.  moveq #0,d0
  7148.  move.w FramesToDraw,d0
  7149.  move.l #digits,a1
  7150.  move.w #2,d2
  7151. digitlop3
  7152.  divs #10,d0
  7153.  swap d0
  7154.  lea (a1,d0.w*8),a2
  7155.  move.b (a2)+,(a0)
  7156.  move.b (a2)+,24(a0)
  7157.  move.b (a2)+,24*2(a0)
  7158.  move.b (a2)+,24*3(a0)
  7159.  move.b (a2)+,24*4(a0)
  7160.  move.b (a2)+,24*5(a0)
  7161.  move.b (a2)+,24*6(a0)
  7162.  move.b (a2)+,24*7(a0)
  7163.  subq #1,a0
  7164.  swap d0
  7165.  ext.l d0
  7166.  dbra d2,digitlop3
  7167.  
  7168. dontshowtime:
  7169.  
  7170.  
  7171.  move.l alanptr,a0
  7172.  move.l (a0)+,alframe
  7173.  cmp.l #endalan,a0
  7174.  blt.s nostartalan
  7175.  move.l #alan,a0
  7176. nostartalan:
  7177.  move.l a0,alanptr
  7178.  
  7179.  
  7180.  tst.b READCONTROLS
  7181.  beq.s nocontrols
  7182.  
  7183.  cmp.b #'s',mors
  7184.  beq.s control2
  7185.  
  7186.  tst.b PLR1MOUSE
  7187.  beq.s PLR1_nomouse
  7188.  bsr PLR1_mouse_control
  7189. PLR1_nomouse:
  7190.  tst.b PLR1KEYS
  7191.  beq.s PLR1_nokeys
  7192.  bsr PLR1_keyboard_control
  7193. PLR1_nokeys:
  7194. ; tst.b PLR1PATH
  7195. ; beq.s PLR1_nopath
  7196. ; bsr PLR1_follow_path
  7197. ;PLR1_nopath:
  7198.  tst.b PLR1JOY
  7199.  beq.s PLR1_nojoy
  7200.  bsr PLR1_JoyStick_control
  7201. PLR1_nojoy: 
  7202.  bra.s nocontrols
  7203.  
  7204. control2:
  7205.  tst.b PLR2MOUSE
  7206.  beq.s PLR2_nomouse
  7207.  bsr PLR2_mouse_control
  7208. PLR2_nomouse:
  7209.  tst.b PLR2KEYS
  7210.  beq.s PLR2_nokeys
  7211.  bsr PLR2_keyboard_control
  7212. PLR2_nokeys:
  7213. ; tst.b PLR2PATH
  7214. ; beq.s PLR2_nopath
  7215. ; bsr PLR1_follow_path
  7216. ;PLR2_nopath:
  7217.  tst.b PLR2JOY
  7218.  beq.s PLR2_nojoy
  7219.  bsr PLR2_JoyStick_control
  7220. PLR2_nojoy: 
  7221.  
  7222.  
  7223. nocontrols:
  7224.  
  7225.  move.l #$dff000,a6
  7226.  
  7227.  cmp.b #'4',Prefsfile+1
  7228.  bne.s nomuckabout
  7229.  
  7230.  move.w #$0,d0 
  7231.  tst.b NoiseMade0LEFT
  7232.  beq.s noturnoff0
  7233.  move.w #1,d0
  7234. noturnoff0:
  7235.  tst.b NoiseMade0RIGHT
  7236.  beq.s noturnoff1
  7237.  or.w #2,d0
  7238. noturnoff1:
  7239.  tst.b NoiseMade1RIGHT
  7240.  beq.s noturnoff2
  7241.  or.w #4,d0
  7242. noturnoff2:
  7243.  tst.b NoiseMade1LEFT
  7244.  beq.s noturnoff3
  7245.  or.w #8,d0
  7246. noturnoff3:
  7247.  move.w d0,dmacon(a6)
  7248.  
  7249. nomuckabout:
  7250.  
  7251.  
  7252. ; tst.b PLR2_fire
  7253. ; beq.s firenotpressed2
  7254. ; fire was pressed last time.
  7255. ; btst #7,$bfe001
  7256. ; bne.s firenownotpressed2
  7257. ; fire is still pressed this time.
  7258. ; st PLR2_fire
  7259. ; bra dointer
  7260.  
  7261. firenownotpressed2:
  7262. ; fire has been released.
  7263. ; clr.b PLR2_fire
  7264. ; bra dointer
  7265.  
  7266. firenotpressed2
  7267.  
  7268. ; fire was not pressed last frame...
  7269.  
  7270. ; btst #7,$bfe001
  7271. ; if it has still not been pressed, go back above
  7272. ; bne.s firenownotpressed2
  7273. ; fire was not pressed last time, and was this time, so has
  7274. ; been clicked.
  7275. ; st PLR2_clicked
  7276. ; st PLR2_fire
  7277.  
  7278. dointer
  7279.  
  7280.  cmp.b #'4',Prefsfile+1
  7281.  beq fourchannel
  7282.  
  7283.  btst #1,$dff000+intreqr
  7284.  bne.s newsampbitl
  7285.  
  7286.  movem.l (a7)+,d0-d7/a0-a6
  7287.  
  7288.  rte
  7289.  
  7290.  
  7291. swappedem: dc.w 0
  7292.  
  7293. newsampbitl:
  7294.  
  7295.  move.w #$820f,$dff000+dmacon
  7296.  
  7297.  move.w #$200,$dff000+intreq
  7298.  
  7299. ; tst.b CHANNELDATA
  7300. ; bne nochannel0
  7301.  
  7302.  move.l pos0LEFT,a0
  7303.  move.l pos2LEFT,a1
  7304.  
  7305.  move.l #tab,a2
  7306.  
  7307.  moveq #0,d0
  7308.  moveq #0,d1
  7309.  move.b vol0left,d0
  7310.  move.b vol2left,d1
  7311.  cmp.b d1,d0
  7312.  slt swappedem
  7313.  bge.s fbig0
  7314.  
  7315. ; d1 is bigger so scale d0 and use d1
  7316. ; as audiochannel volume.
  7317.  
  7318.  exg a0,a1
  7319.  asl.w #6,d0
  7320.  divs d1,d0
  7321.  lsl.w #8,d0
  7322.  adda.w d0,a2
  7323.  move.w d1,$dff0a8
  7324.  bra.s donechan0
  7325.  
  7326. fbig0:
  7327.  tst.w d0
  7328.  beq.s donechan0
  7329.  asl.w #6,d1
  7330.  divs d0,d1
  7331.  lsl.w #8,d1
  7332.  adda.w d1,a2
  7333.  move.w d0,$dff0a8
  7334.  
  7335. donechan0:
  7336.  
  7337.  move.l Aupt0,a3
  7338.  move.l a3,$dff0a0
  7339.  move.l Auback0,Aupt0
  7340.  move.l a3,Auback0
  7341.  
  7342.  move.l Auback0,a3
  7343.  
  7344.  moveq #0,d0
  7345.  moveq #0,d1
  7346.  moveq #0,d2
  7347.  moveq #0,d3
  7348.  moveq #0,d4
  7349.  moveq #0,d5
  7350.  move.w #49,d7
  7351. loop:
  7352.  move.l (a0)+,d0
  7353.  move.b (a1)+,d1
  7354.  move.b (a1)+,d2
  7355.  move.b (a1)+,d3
  7356.  move.b (a1)+,d4
  7357.  move.b (a2,d3.w),d5
  7358.  swap d5
  7359.  move.b (a2,d1.w),d5
  7360.  asl.l #8,d5
  7361.  move.b (a2,d2.w),d5
  7362.  swap d5
  7363.  move.b (a2,d4.w),d5
  7364.  add.l d5,d0
  7365.  move.l d0,(a3)+
  7366.  dbra d7,loop
  7367.  
  7368.  tst.b swappedem
  7369.  beq.s .ok23
  7370.  exg a0,a1
  7371. .ok23:
  7372.  
  7373.  cmp.l Samp0endLEFT,a0
  7374.  blt.s .notoffendsamp1
  7375.  move.l SampleList+6*8,a0
  7376.  move.l SampleList+6*8+4,Samp0endLEFT
  7377.  move.b #63,vol0left
  7378.  st LEFTCHANDATA+1
  7379.  move.w #0,LEFTCHANDATA+2
  7380. .notoffendsamp1:
  7381.  
  7382.  cmp.l Samp2endLEFT,a1
  7383.  blt.s .notoffendsamp2
  7384.  move.l #empty,a1
  7385.  move.l #emptyend,Samp2endLEFT
  7386.  move.b #0,vol2left
  7387.  st LEFTCHANDATA+1+8
  7388.  move.w #0,LEFTCHANDATA+2+8
  7389. .notoffendsamp2:
  7390.  
  7391.  move.l a0,pos0LEFT
  7392.  move.l a1,pos2LEFT
  7393.  
  7394. nochannel0:
  7395.  
  7396.  tst.b CHANNELDATA+16
  7397.  bne nochannel1
  7398.  
  7399.  
  7400.  move.l pos0RIGHT,a0
  7401.  move.l pos2RIGHT,a1
  7402.  
  7403.  move.l Aupt1,a3
  7404.  move.l a3,$dff0b0
  7405.  move.l Auback1,Aupt1
  7406.  move.l a3,Auback1
  7407.  
  7408.  move.l #tab,a2
  7409.  
  7410.  moveq #0,d0
  7411.  moveq #0,d1
  7412.  move.b vol0right,d0
  7413.  move.b vol2right,d1
  7414.  cmp.b d1,d0
  7415.  slt swappedem
  7416.  bge.s fbig1
  7417.  
  7418. ; d1 is bigger so scale d0 and use d1
  7419. ; as audiochannel volume.
  7420.  
  7421.  exg a0,a1
  7422.  asl.w #6,d0
  7423.  divs d1,d0
  7424.  lsl.w #8,d0
  7425.  adda.w d0,a2
  7426.  move.w d1,$dff0b8
  7427.  bra.s donechan1
  7428.  
  7429. fbig1:
  7430.  tst.w d0
  7431.  beq.s donechan1
  7432.  asl.w #6,d1
  7433.  divs d0,d1
  7434.  lsl.w #8,d1
  7435.  adda.w d1,a2
  7436.  move.w d0,$dff0b8
  7437.  
  7438. donechan1:
  7439.  moveq #0,d0
  7440.  moveq #0,d1
  7441.  moveq #0,d2
  7442.  moveq #0,d3
  7443.  moveq #0,d4
  7444.  moveq #0,d5
  7445.  move.w #49,d7
  7446. loop2:
  7447.  move.l (a0)+,d0
  7448.  move.b (a1)+,d1
  7449.  move.b (a1)+,d2
  7450.  move.b (a1)+,d3
  7451.  move.b (a1)+,d4
  7452.  move.b (a2,d3.w),d5
  7453.  swap d5
  7454.  move.b (a2,d1.w),d5
  7455.  asl.l #8,d5
  7456.  move.b (a2,d2.w),d5
  7457.  swap d5
  7458.  move.b (a2,d4.w),d5
  7459.  add.l d5,d0
  7460.  move.l d0,(a3)+
  7461.  dbra d7,loop2
  7462.  
  7463.  tst.b swappedem
  7464.  beq.s ok01
  7465.  exg a0,a1
  7466. ok01:
  7467.  
  7468.  cmp.l Samp0endRIGHT,a0
  7469.  blt.s .notoffendsamp1
  7470.  move.l #empty,a0
  7471.  move.l #emptyend,Samp0endRIGHT
  7472.  move.b #0,vol0right
  7473.  st RIGHTCHANDATA+1
  7474.  move.w #0,RIGHTCHANDATA+2
  7475. .notoffendsamp1:
  7476.  
  7477.  cmp.l Samp2endRIGHT,a1
  7478.  blt.s .notoffendsamp2
  7479.  move.l #empty,a1
  7480.  move.l #emptyend,Samp2endRIGHT
  7481.  move.b #0,vol2right
  7482.  st RIGHTCHANDATA+1+8
  7483.  move.w #0,RIGHTCHANDATA+2+8
  7484. .notoffendsamp2:
  7485.  
  7486.  move.l a0,pos0RIGHT
  7487.  move.l a1,pos2RIGHT
  7488.  
  7489. nochannel1:
  7490.  
  7491. ******************* Other two channels
  7492.  
  7493.  move.l pos1LEFT,a0
  7494.  move.l pos3LEFT,a1
  7495.  
  7496.  move.l #tab,a2
  7497.  
  7498.  moveq #0,d0
  7499.  moveq #0,d1
  7500.  move.b vol1left,d0
  7501.  move.b vol3left,d1
  7502.  cmp.b d1,d0
  7503.  slt swappedem
  7504.  bge.s fbig2
  7505.  
  7506. ; d1 is bigger so scale d0 and use d1
  7507. ; as audiochannel volume.
  7508.  
  7509.  exg a0,a1
  7510.  asl.w #6,d0
  7511.  divs d1,d0
  7512.  lsl.w #8,d0
  7513.  adda.w d0,a2
  7514.  move.w d1,$dff0d8
  7515.  bra.s donechan2
  7516.  
  7517. fbig2:
  7518.  tst.w d0
  7519.  beq.s donechan2
  7520.  asl.w #6,d1
  7521.  divs d0,d1
  7522.  lsl.w #8,d1
  7523.  adda.w d1,a2
  7524.  move.w d0,$dff0d8
  7525.  
  7526. donechan2:
  7527.  
  7528.  move.l Aupt2,a3
  7529.  move.l a3,$dff0d0
  7530.  move.l Auback2,Aupt2
  7531.  move.l a3,Auback2
  7532.  
  7533.  moveq #0,d0
  7534.  moveq #0,d1
  7535.  moveq #0,d2
  7536.  moveq #0,d3
  7537.  moveq #0,d4
  7538.  moveq #0,d5
  7539.  move.w #49,d7
  7540. loop3:
  7541.  move.l (a0)+,d0
  7542.  move.b (a1)+,d1
  7543.  move.b (a1)+,d2
  7544.  move.b (a1)+,d3
  7545.  move.b (a1)+,d4
  7546.  move.b (a2,d3.w),d5
  7547.  swap d5
  7548.  move.b (a2,d1.w),d5
  7549.  asl.l #8,d5
  7550.  move.b (a2,d2.w),d5
  7551.  swap d5
  7552.  move.b (a2,d4.w),d5
  7553.  add.l d5,d0
  7554.  move.l d0,(a3)+
  7555.  dbra d7,loop3
  7556.  
  7557.  tst.b swappedem
  7558.  beq.s .ok23
  7559.  exg a0,a1
  7560. .ok23:
  7561.  
  7562.  cmp.l Samp1endLEFT,a0
  7563.  blt.s .notoffendsamp3
  7564.  move.l #empty,a0
  7565.  move.l #emptyend,Samp1endLEFT
  7566.  move.b #0,vol1left
  7567.  st LEFTCHANDATA+1+4
  7568.  move.w #0,LEFTCHANDATA+2+4
  7569. .notoffendsamp3:
  7570.  
  7571.  cmp.l Samp3endLEFT,a1
  7572.  blt.s .notoffendsamp4
  7573.  move.l #empty,a1
  7574.  move.l #emptyend,Samp3endLEFT
  7575.  move.b #0,vol3left
  7576.  st LEFTCHANDATA+1+12
  7577.  move.w #0,LEFTCHANDATA+2+12
  7578. .notoffendsamp4:
  7579.  
  7580.  move.l a0,pos1LEFT
  7581.  move.l a1,pos3LEFT
  7582.  
  7583.  move.l pos1RIGHT,a0
  7584.  move.l pos3RIGHT,a1
  7585.  
  7586.  move.l Aupt3,a3
  7587.  move.l a3,$dff0c0
  7588.  move.l Auback3,Aupt3
  7589.  move.l a3,Auback3
  7590.  
  7591.  move.l #tab,a2
  7592.  
  7593.  moveq #0,d0
  7594.  moveq #0,d1
  7595.  move.b vol1right,d0
  7596.  move.b vol3right,d1
  7597.  cmp.b d1,d0
  7598.  slt.s swappedem
  7599.  bge.s fbig3
  7600.  
  7601.  exg a0,a1
  7602.  asl.w #6,d0
  7603.  divs d1,d0
  7604.  lsl.w #8,d0
  7605.  adda.w d0,a2
  7606.  move.w d1,$dff0c8
  7607.  bra.s donechan3
  7608.  
  7609. fbig3:
  7610.  tst.w d0
  7611.  beq.s donechan3
  7612.  asl.w #6,d1
  7613.  divs d0,d1
  7614.  lsl.w #8,d1
  7615.  adda.w d1,a2
  7616.  move.w d0,$dff0c8
  7617. donechan3:
  7618.  
  7619.  moveq #0,d0
  7620.  moveq #0,d1
  7621.  moveq #0,d2
  7622.  moveq #0,d3
  7623.  moveq #0,d4
  7624.  moveq #0,d5
  7625.  move.w #49,d7
  7626. loop4:
  7627.  move.l (a0)+,d0
  7628.  move.b (a1)+,d1
  7629.  move.b (a1)+,d2
  7630.  move.b (a1)+,d3
  7631.  move.b (a1)+,d4
  7632.  move.b (a2,d3.w),d5
  7633.  swap d5
  7634.  move.b (a2,d1.w),d5
  7635.  asl.l #8,d5
  7636.  move.b (a2,d2.w),d5
  7637.  swap d5
  7638.  move.b (a2,d4.w),d5
  7639.  add.l d5,d0
  7640.  move.l d0,(a3)+
  7641.  dbra d7,loop4
  7642.  
  7643.  tst.b swappedem
  7644.  beq.s .ok23
  7645.  exg a0,a1
  7646. .ok23:
  7647.  
  7648.  cmp.l Samp1endRIGHT,a0
  7649.  blt.s notoffendsamp3
  7650.  move.l #empty,a0
  7651.  move.l #emptyend,Samp1endRIGHT
  7652.  move.b #0,vol1right
  7653.  st RIGHTCHANDATA+1+4
  7654.  move.w #0,RIGHTCHANDATA+2+4
  7655. notoffendsamp3:
  7656.  
  7657.  cmp.l Samp3endRIGHT,a1
  7658.  blt.s notoffendsamp4
  7659.  move.l #empty,a1
  7660.  move.l #emptyend,Samp3endRIGHT
  7661.  move.b #0,vol3right
  7662.  st RIGHTCHANDATA+1+12
  7663.  move.w #0,RIGHTCHANDATA+2+12
  7664. notoffendsamp4:
  7665.  
  7666.  move.l a0,pos1RIGHT
  7667.  move.l a1,pos3RIGHT
  7668.  
  7669.  movem.l (a7)+,d0-d7/a0-a6
  7670.  tst.b counting
  7671.  beq .nostartcounter
  7672.  JSR STARTCOUNT
  7673. .nostartcounter:
  7674.  
  7675.  rte
  7676.  
  7677. ***********************************
  7678. * 4 channel sound routine
  7679. ***********************************
  7680.  
  7681. fourchannel:
  7682.  
  7683.  move.l #$dff000,a6
  7684.  
  7685.  btst #7,intreqrl(a6)
  7686.  beq.s nofinish0
  7687. ; move.w #0,LEFTCHANDATA+2
  7688. ; st LEFTCHANDATA+1
  7689.  move.l #null,$a0(a6)
  7690.  move.w #100,$a4(a6) 
  7691.  move.w #$0080,intreq(a6)
  7692. nofinish0:
  7693.  
  7694.  tst.b NoiseMade0pLEFT
  7695.  beq.s NoChan0sound
  7696.  
  7697.  move.l Samp0endLEFT,d0
  7698.  move.l pos0LEFT,d1
  7699.  sub.l d1,d0
  7700.  lsr.l #1,d0
  7701.  move.w d0,$a4(a6)
  7702.  move.l d1,$a0(a6)
  7703.  move.w #$8201,dmacon(a6)
  7704.  moveq #0,d0
  7705.  move.b vol0left,d0
  7706.  move.w d0,$a8(a6)
  7707.  
  7708. NoChan0sound:
  7709.  
  7710. *****************************************
  7711. *****************************************
  7712.  
  7713.  btst #0,intreqr(a6)
  7714.  beq.s nofinish1
  7715.  move.l #null,$b0(a6)
  7716.  move.w #100,$b4(a6)
  7717.  move.w #$0100,intreq(a6)
  7718. nofinish1:
  7719.  
  7720.  tst.b NoiseMade0pRIGHT
  7721.  beq.s NoChan1sound
  7722.  
  7723.  move.l Samp0endRIGHT,d0
  7724.  move.l pos0RIGHT,d1
  7725.  sub.l d1,d0
  7726.  lsr.l #1,d0
  7727.  move.w d0,$b4(a6)
  7728.  move.l d1,$b0(a6)
  7729.  move.w d0,playnull1
  7730.  move.w #$8202,dmacon(a6)
  7731.  moveq #0,d0
  7732.  move.b vol0right,d0
  7733.  move.w d0,$b8(a6)
  7734.  
  7735. NoChan1sound:
  7736.  
  7737. *****************************************
  7738. *****************************************
  7739.  
  7740.  btst #1,intreqr(a6)
  7741.  beq.s nofinish2
  7742.  move.l #null,$c0(a6)
  7743.  move.w #100,$c4(a6)
  7744.  move.w #$0200,intreq(a6)
  7745. nofinish2:
  7746.  
  7747.  tst.b NoiseMade1pRIGHT
  7748.  beq.s NoChan2sound
  7749.  
  7750.  move.l Samp1endRIGHT,d0
  7751.  move.l pos1RIGHT,d1
  7752.  sub.l d1,d0
  7753.  lsr.l #1,d0
  7754.  move.w d0,$c4(a6)
  7755.  move.w d0,playnull2
  7756.  
  7757.  move.l d1,$c0(a6)
  7758.  move.w #$8204,dmacon(a6)
  7759.  moveq #0,d0
  7760.  move.b vol1right,d0
  7761.  move.w d0,$c8(a6)
  7762.  
  7763. NoChan2sound:
  7764.  
  7765. *****************************************
  7766. *****************************************
  7767.  
  7768.  btst #2,intreqr(a6)
  7769.  beq.s nofinish3
  7770.  move.l #null,$d0(a6)
  7771.  move.w #100,$d4(a6)
  7772.  move.w #$0400,intreq(a6)
  7773. nofinish3:
  7774.  
  7775.  tst.b NoiseMade1pLEFT
  7776.  beq.s NoChan3sound
  7777.  
  7778.  move.l Samp1endLEFT,d0
  7779.  move.l pos1LEFT,d1
  7780.  sub.l d1,d0
  7781.  lsr.l #1,d0
  7782.  move.w d0,$d4(a6)
  7783.  move.w d0,playnull3
  7784.  move.l d1,$d0(a6)
  7785.  move.w #$8208,dmacon(a6)
  7786.  moveq #0,d0
  7787.  move.b vol1left,d0
  7788.  move.w d0,$d8(a6)
  7789.  
  7790. NoChan3sound:
  7791.  
  7792. nomorechannels:
  7793.  
  7794.  move.l NoiseMade0LEFT,NoiseMade0pLEFT
  7795.  move.l #0,NoiseMade0LEFT
  7796.  move.l NoiseMade0RIGHT,NoiseMade0pRIGHT
  7797.  move.l #0,NoiseMade0RIGHT
  7798.  
  7799. ; tst.b playnull0
  7800. ; beq.s .nnul
  7801. ; sub.b #1,playnull0
  7802. ; bra.s chan0still
  7803. ;.nnul:
  7804. ;chan0still:
  7805.  
  7806.  tst.b NoiseMade0pLEFT
  7807.  bne.s chan0still
  7808.  tst.w playnull0
  7809.  beq.s nnul0
  7810.  sub.w #100,playnull0
  7811.  bra.s chan0still
  7812. nnul0:
  7813.  move.w #0,LEFTCHANDATA+2
  7814.  st LEFTCHANDATA+1
  7815. chan0still:
  7816.  
  7817.  tst.b NoiseMade0pRIGHT
  7818.  bne.s chan1still
  7819.  tst.w playnull1
  7820.  beq.s nnul1
  7821.  sub.w #100,playnull1
  7822.  bra.s chan1still
  7823. nnul1:
  7824.  move.w #0,RIGHTCHANDATA+2
  7825.  st RIGHTCHANDATA+1
  7826. chan1still:
  7827.  
  7828.  tst.b NoiseMade1pRIGHT
  7829.  bne.s chan2still
  7830.  tst.w playnull2
  7831.  beq.s nnul2
  7832.  sub.w #100,playnull2
  7833.  bra.s chan2still
  7834. nnul2:
  7835.  move.w #0,RIGHTCHANDATA+2+4
  7836.  st RIGHTCHANDATA+1+4
  7837. chan2still:
  7838.  
  7839.  tst.b NoiseMade1pLEFT
  7840.  bne.s chan3still
  7841.  tst.w playnull3
  7842.  beq.s nnul3
  7843.  sub.w #100,playnull3
  7844.  bra.s chan3still
  7845. nnul3:
  7846.  move.w #0,LEFTCHANDATA+2+4
  7847.  st LEFTCHANDATA+1+4
  7848.  
  7849. chan3still:
  7850.  
  7851.  
  7852.  movem.l (a7)+,d0-d7/a0-a6
  7853.  
  7854.  rte
  7855.  
  7856. backbeat: dc.w 0
  7857.  
  7858. playnull0: dc.w 0
  7859. playnull1: dc.w 0
  7860. playnull2: dc.w 0
  7861. playnull3: dc.w 0
  7862.  
  7863. Samp0endRIGHT: dc.l emptyend
  7864. Samp1endRIGHT: dc.l emptyend
  7865. Samp2endRIGHT: dc.l emptyend
  7866. Samp3endRIGHT: dc.l emptyend
  7867. Samp0endLEFT: dc.l emptyend
  7868. Samp1endLEFT: dc.l emptyend
  7869. Samp2endLEFT: dc.l emptyend
  7870. Samp3endLEFT: dc.l emptyend
  7871.  
  7872. Aupt0: dc.l null
  7873. Auback0: dc.l null+500
  7874. Aupt2: dc.l null3
  7875. Auback2: dc.l null3+500
  7876. Aupt3: dc.l null4
  7877. Auback3: dc.l null4+500
  7878. Aupt1: dc.l null2
  7879. Auback1: dc.l null2+500
  7880.  
  7881. NoiseMade0LEFT: dc.b 0
  7882. NoiseMade1LEFT: dc.b 0
  7883. NoiseMade2LEFT: dc.b 0
  7884. NoiseMade3LEFT: dc.b 0
  7885. NoiseMade0pLEFT: dc.b 0
  7886. NoiseMade1pLEFT: dc.b 0
  7887. NoiseMade2pLEFT: dc.b 0
  7888. NoiseMade3pLEFT: dc.b 0
  7889. NoiseMade0RIGHT: dc.b 0
  7890. NoiseMade1RIGHT: dc.b 0
  7891. NoiseMade2RIGHT: dc.b 0
  7892. NoiseMade3RIGHT: dc.b 0
  7893. NoiseMade0pRIGHT: dc.b 0
  7894. NoiseMade1pRIGHT: dc.b 0
  7895. NoiseMade2pRIGHT: dc.b 0
  7896. NoiseMade3pRIGHT: dc.b 0
  7897.  
  7898. empty: ds.l 100
  7899. emptyend:
  7900.  
  7901. **************************************
  7902. * I want a routine to calculate all the
  7903. * info needed for the sound player to
  7904. * work, given say position of noise, volume
  7905. * and sample number.
  7906.  
  7907. Samplenum: dc.w 0
  7908. Noisex: dc.w 0
  7909. Noisez: dc.w 0
  7910. Noisevol: dc.w 0
  7911. chanpick: dc.w 0
  7912. IDNUM: dc.w 0
  7913. needleft: dc.b 0
  7914. needright: dc.b 0
  7915. STEREO: dc.b $0
  7916. even
  7917. prot6: dc.w 0
  7918.  
  7919.  even
  7920.  
  7921. CHANNELDATA:
  7922. LEFTCHANDATA:
  7923.  dc.l $00000000
  7924.  dc.l $00000000
  7925.  dc.l $FF000000
  7926.  dc.l $FF000000
  7927. RIGHTCHANDATA:
  7928.  dc.l $00000000
  7929.  dc.l $00000000
  7930.  dc.l $FF000000
  7931.  dc.l $FF000000
  7932.  
  7933. RIGHTPLAYEDTAB: ds.l 20
  7934. LEFTPLAYEDTAB: ds.l 20
  7935.  
  7936. MakeSomeNoise:
  7937.  
  7938. ; Plan for new sound handler:
  7939. ; It is sent a sample number,
  7940. ; a position relative to the
  7941. ; player, an id number and a volume.
  7942. ; Also notifplaying.
  7943.  
  7944. ; indirect inputs are the available
  7945. ; channel flags and whether or not
  7946. ; stereo sound is selected.
  7947.  
  7948. ; the algorithm must decide
  7949. ; whether the new sound is more
  7950. ; important than the ones already
  7951. ; playing. Thus an 'importance'
  7952. ; must be calculated, probably
  7953. ; using volume.
  7954.  
  7955. ; The output needs to be:
  7956.  
  7957. ; Write the pointers and volumes of
  7958. ; the sound channels
  7959.  
  7960.  
  7961.  tst.b notifplaying
  7962.  beq.s dontworry
  7963.  
  7964. ; find if we are already playing
  7965.  
  7966.  move.b IDNUM,d0
  7967.  move.w #7,d1
  7968.  lea CHANNELDATA,a3
  7969. findsameasme
  7970.  tst.b (a3)
  7971.  bne.s notavail
  7972.  cmp.b 1(a3),d0
  7973.  beq SameAsMe
  7974. notavail:
  7975.  add.w #4,a3
  7976.  dbra d1,findsameasme
  7977.  bra dontworry
  7978. SameAsMe
  7979.  rts
  7980.  
  7981. noiseloud: dc.w 0
  7982.  
  7983. dontworry:
  7984.  
  7985. ; Ok its fine for us to play a sound.
  7986. ; So calculate left/right volume.
  7987.  
  7988.  move.w Noisex,d1
  7989.  muls d1,d1
  7990.  move.w Noisez,d2
  7991.  muls d2,d2
  7992.  move.w #64,d3
  7993.  move.w #32767,noiseloud
  7994.  moveq #1,d0
  7995.  add.l d1,d2
  7996.  beq pastcalc
  7997.  
  7998.  move.w #31,d0
  7999. .findhigh
  8000.  btst d0,d2
  8001.  bne .foundhigh
  8002.  dbra d0,.findhigh
  8003. .foundhigh
  8004.  asr.w #1,d0
  8005.  clr.l d3
  8006.  bset d0,d3
  8007.  move.l d3,d0
  8008.  
  8009.  move.w d0,d3
  8010.  muls d3,d3    ; x*x
  8011.  sub.l d2,d3    ; x*x-a
  8012.  asr.l #1,d3    ; (x*x-a)/2
  8013.  divs d0,d3    ; (x*x-a)/2x
  8014.  sub.w d3,d0    ; second approx
  8015.  bgt .stillnot0
  8016.  move.w #1,d0
  8017. .stillnot0
  8018.  
  8019.  move.w d0,d3
  8020.  muls d3,d3
  8021.  sub.l d2,d3
  8022.  asr.l #1,d3
  8023.  divs d0,d3
  8024.  sub.w d3,d0    ; second approx
  8025.  bgt .stillnot02
  8026.  move.w #1,d0
  8027. .stillnot02
  8028.  
  8029.  move.w Noisevol,d3
  8030.  ext.l d3
  8031.  asl.l #6,d3
  8032.  cmp.l #32767,d3
  8033.  ble.s .nnnn
  8034.  move.l #32767,d3
  8035. .nnnn
  8036.  
  8037.  asr.w #2,d0
  8038.  addq #1,d0
  8039.  divs d0,d3
  8040.  
  8041.  move.w d3,noiseloud
  8042.  
  8043.  cmp.w #64,d3
  8044.  ble.s notooloud
  8045.  move.w #64,d3
  8046. notooloud:
  8047.  
  8048. pastcalc:
  8049.  
  8050.     ; d3 contains volume of noise.
  8051.     
  8052.  move.w d3,d4
  8053.  
  8054.  move.w d3,d2
  8055.  muls Noisex,d2
  8056.  asl.w #3,d0
  8057.  divs d0,d2
  8058.  
  8059.  bgt.s quietleft
  8060.  add.w d2,d4
  8061.  bge.s donequiet
  8062.  move.w #0,d4
  8063.  bra.s donequiet
  8064. quietleft:
  8065.  sub.w d2,d3
  8066.  bge.s donequiet
  8067.  move.w #0,d3
  8068. donequiet:
  8069.  
  8070. ; d3=leftvol?
  8071. ; d4=rightvol?
  8072.  
  8073.  clr.w needleft
  8074.  
  8075.  cmp.b d3,d4
  8076.  bgt.s RightLouder
  8077.  
  8078. ; Left is louder; is it MUCH louder?
  8079.  
  8080.  st needleft
  8081.  move.w d3,d2
  8082.  sub.w d4,d2
  8083.  cmp.w #32,d2
  8084.  slt needright
  8085.  bra aboutsame
  8086.  
  8087. RightLouder:
  8088.  st needright
  8089.  move.w d4,d2
  8090.  sub.w d3,d2
  8091.  cmp.w #32,d2
  8092.  slt needleft
  8093.  
  8094. aboutsame:
  8095.  
  8096.  tst.b STEREO
  8097.  beq NOSTEREO
  8098.  
  8099. ; Find least important sound on left
  8100.  
  8101.  move.l #0,a2
  8102.  move.l #0,d5
  8103.  move.w #32767,d2
  8104.  move.b IDNUM,d0
  8105.  lea LEFTCHANDATA,a3
  8106.  move.w #3,d1
  8107. FindLeftChannel
  8108.  tst.b (a3)
  8109.  bne.s .notactive
  8110.  cmp.b 1(a3),d0
  8111.  beq.s FOUNDLEFT
  8112.  cmp.w 2(a3),d2
  8113.  blt.s .notactive
  8114.  move.w 2(a3),d2
  8115.  move.l a3,a2
  8116.  move.w d5,d6
  8117.  
  8118. .notactive:
  8119.  add.w #4,a3
  8120.  add.w #1,d5
  8121.  dbra d1,FindLeftChannel
  8122.  move.l a2,a3
  8123.  bra.s gopastleft
  8124. FOUNDLEFT:
  8125.  move.w d5,d6
  8126. gopastleft:
  8127.  tst.l a3
  8128.  bne.s FOUNDALEFT
  8129.  rts
  8130. FOUNDALEFT:
  8131.  
  8132. ; d6 = channel number
  8133.  move.b d0,1(a3)
  8134.  move.w d3,2(a3)
  8135.  
  8136.  move.w Samplenum,d5
  8137.  move.l #SampleList,a3
  8138.  move.l (a3,d5.w*8),a1
  8139.  move.l 4(a3,d5.w*8),a2
  8140.  
  8141.  tst.b d6
  8142.  seq NoiseMade0LEFT
  8143.  beq.s .chan0
  8144.  cmp.b #2,d6
  8145.  slt NoiseMade1LEFT
  8146.  blt .chan1
  8147.  seq NoiseMade2LEFT
  8148.  beq .chan2
  8149.  st NoiseMade3LEFT
  8150.  
  8151.  move.b d5,LEFTPLAYEDTAB+9
  8152.  move.b d3,LEFTPLAYEDTAB+1+9
  8153.  move.b d4,LEFTPLAYEDTAB+2+9
  8154.  move.b d3,vol3left
  8155.  move.l a1,pos3LEFT
  8156.  move.l a2,Samp3endLEFT
  8157.  bra dorightchan
  8158.  
  8159. .chan0: 
  8160.  move.b d5,LEFTPLAYEDTAB
  8161.  move.b d3,LEFTPLAYEDTAB+1
  8162.  move.b d4,LEFTPLAYEDTAB+2
  8163.  move.l a1,pos0LEFT
  8164.  move.l a2,Samp0endLEFT
  8165.  move.b d3,vol0left
  8166.  bra dorightchan
  8167.  
  8168. .chan1:
  8169.  move.b d5,LEFTPLAYEDTAB+3
  8170.  move.b d3,LEFTPLAYEDTAB+1+3
  8171.  move.b d4,LEFTPLAYEDTAB+2+3
  8172.  move.b d3,vol1left
  8173.  move.l a1,pos1LEFT
  8174.  move.l a2,Samp1endLEFT
  8175.  bra dorightchan
  8176.  
  8177. .chan2: 
  8178.  move.b d5,LEFTPLAYEDTAB+6
  8179.  move.b d3,LEFTPLAYEDTAB+1+6
  8180.  move.b d4,LEFTPLAYEDTAB+2+6
  8181.  move.l a1,pos2LEFT
  8182.  move.l a2,Samp2endLEFT
  8183.  move.b d3,vol2left
  8184.  
  8185. dorightchan:
  8186.  
  8187. ; Find least important sound on right
  8188.  
  8189.  move.l #0,a2
  8190.  move.l #0,d5
  8191.  move.w #10000,d2
  8192.  move.b IDNUM,d0
  8193.  lea RIGHTCHANDATA,a3
  8194.  move.w #3,d1
  8195. FindRightChannel
  8196.  tst.b (a3)
  8197.  bne.s .notactive
  8198.  cmp.b 1(a3),d0
  8199.  beq.s FOUNDRIGHT
  8200.  cmp.w 2(a3),d2
  8201.  blt.s .notactive
  8202.  move.w 2(a3),d2
  8203.  move.l a3,a2
  8204.  move.w d5,d6
  8205.  
  8206. .notactive:
  8207.  add.w #4,a3
  8208.  add.w #1,d5
  8209.  dbra d1,FindRightChannel
  8210.  move.l a2,a3
  8211.  bra.s gopastright
  8212. FOUNDRIGHT:
  8213.  move.w d5,d6
  8214. gopastright:
  8215.  tst.l a3
  8216.  bne.s FOUNDARIGHT
  8217.  rts
  8218. FOUNDARIGHT:
  8219.  
  8220. ; d6 = channel number
  8221.  move.b d0,1(a3)
  8222.  move.w d3,2(a3)
  8223.  
  8224.  move.w Samplenum,d5
  8225.  move.l #SampleList,a3
  8226.  move.l (a3,d5.w*8),a1
  8227.  move.l 4(a3,d5.w*8),a2
  8228.  
  8229.  tst.b d6
  8230.  seq NoiseMade0RIGHT
  8231.  beq.s .chan0
  8232.  cmp.b #2,d6
  8233.  slt NoiseMade1RIGHT
  8234.  blt .chan1
  8235.  seq NoiseMade2RIGHT
  8236.  beq .chan2
  8237.  st NoiseMade3RIGHT
  8238.  
  8239.  move.b d5,RIGHTPLAYEDTAB+9
  8240.  move.b d3,RIGHTPLAYEDTAB+1+9
  8241.  move.b d4,RIGHTPLAYEDTAB+2+9
  8242.  move.b d4,vol3right
  8243.  move.l a1,pos3RIGHT
  8244.  move.l a2,Samp3endRIGHT
  8245.  rts
  8246.  
  8247. .chan0: 
  8248.  move.b d5,RIGHTPLAYEDTAB
  8249.  move.b d3,RIGHTPLAYEDTAB+1
  8250.  move.b d4,RIGHTPLAYEDTAB+2
  8251.  move.l a1,pos0RIGHT
  8252.  move.l a2,Samp0endRIGHT
  8253.  move.b d4,vol0right
  8254.  rts
  8255.  
  8256. .chan1:
  8257.  move.b d5,RIGHTPLAYEDTAB+3
  8258.  move.b d3,RIGHTPLAYEDTAB+1+3
  8259.  move.b d4,RIGHTPLAYEDTAB+2+3
  8260.  move.b d3,vol1right
  8261.  move.l a1,pos1RIGHT
  8262.  move.l a2,Samp1endRIGHT
  8263.  rts
  8264.  
  8265. .chan2: 
  8266.  move.b d5,RIGHTPLAYEDTAB+6
  8267.  move.b d3,RIGHTPLAYEDTAB+1+6
  8268.  move.b d4,RIGHTPLAYEDTAB+2+6
  8269.  move.l a1,pos2RIGHT
  8270.  move.l a2,Samp2endRIGHT
  8271.  move.b d3,vol2right
  8272.  rts
  8273.  
  8274. NOSTEREO:
  8275.  move.l #0,a2
  8276.  move.l #-1,d5
  8277.  move.w #32767,d2
  8278.  move.b IDNUM,d0
  8279.  lea CHANNELDATA,a3
  8280.  move.w #7,d1
  8281. FindChannel
  8282.  tst.b (a3)
  8283.  bne.s .notactive
  8284.  cmp.b 1(a3),d0
  8285.  beq.s FOUNDCHAN
  8286.  cmp.w 2(a3),d2
  8287.  blt.s .notactive
  8288.  move.w 2(a3),d2
  8289.  move.l a3,a2
  8290.  move.w d5,d6
  8291.  add.w #1,d6
  8292.  
  8293. .notactive:
  8294.  add.w #4,a3
  8295.  add.w #1,d5
  8296.  dbra d1,FindChannel
  8297.  
  8298.  move.l a2,a3
  8299.  bra.s gopastchan
  8300. FOUNDCHAN:
  8301.  move.w d5,d6
  8302.  add.w #1,d6
  8303. gopastchan:
  8304.  tst.w d6
  8305.  bge.s FOUNDACHAN
  8306. tooquiet:
  8307.  rts
  8308. FOUNDACHAN:
  8309.  
  8310. ; d6 = channel number
  8311.  
  8312.  cmp.w noiseloud,d2
  8313.  bgt.s tooquiet
  8314.  
  8315.  move.b d0,1(a3)
  8316.  move.w noiseloud,2(a3)
  8317.  
  8318.  move.w Samplenum,d5
  8319.  move.l #SampleList,a3
  8320.  move.l (a3,d5.w*8),a1
  8321.  move.l 4(a3,d5.w*8),a2
  8322.  
  8323.  tst.b d6
  8324.  beq .chan0
  8325.  cmp.b #2,d6
  8326.  blt .chan1
  8327.  beq .chan2
  8328.  cmp.b #4,d6
  8329.  blt .chan3
  8330.  beq .chan4
  8331.  cmp.b #6,d6
  8332.  blt .chan5
  8333.  beq .chan6
  8334.  st NoiseMade3RIGHT
  8335.  
  8336.  move.b d5,RIGHTPLAYEDTAB+9
  8337.  move.b d3,RIGHTPLAYEDTAB+1+9
  8338.  move.b d4,RIGHTPLAYEDTAB+2+9
  8339.  move.b d4,vol3right
  8340.  move.l a1,pos3RIGHT
  8341.  move.l a2,Samp3endRIGHT
  8342.  rts
  8343.  
  8344. .chan3:
  8345.  st NoiseMade3LEFT
  8346.  move.b d5,LEFTPLAYEDTAB+9
  8347.  move.b d3,LEFTPLAYEDTAB+1+9
  8348.  move.b d4,LEFTPLAYEDTAB+2+9
  8349.  move.b d3,vol3left
  8350.  move.l a1,pos3LEFT
  8351.  move.l a2,Samp3endLEFT
  8352.  bra dorightchan
  8353.  
  8354. .chan0: 
  8355.  st NoiseMade0LEFT
  8356.  move.b d5,LEFTPLAYEDTAB
  8357.  move.b d3,LEFTPLAYEDTAB+1
  8358.  move.b d4,LEFTPLAYEDTAB+2
  8359.  move.l a1,pos0LEFT
  8360.  move.l a2,Samp0endLEFT
  8361.  move.b d3,vol0left
  8362.  rts
  8363.  
  8364. .chan1:
  8365.  st NoiseMade1LEFT
  8366.  move.b d5,LEFTPLAYEDTAB+3
  8367.  move.b d3,LEFTPLAYEDTAB+1+3
  8368.  move.b d4,LEFTPLAYEDTAB+2+3
  8369.  move.b d3,vol1left
  8370.  move.l a1,pos1LEFT
  8371.  move.l a2,Samp1endLEFT
  8372.  rts
  8373.  
  8374. .chan2: 
  8375.  st NoiseMade2LEFT
  8376.  move.b d5,LEFTPLAYEDTAB+6
  8377.  move.b d3,LEFTPLAYEDTAB+1+6
  8378.  move.b d4,LEFTPLAYEDTAB+2+6
  8379.  move.l a1,pos2LEFT
  8380.  move.l a2,Samp2endLEFT
  8381.  move.b d3,vol2left
  8382.  rts
  8383.  
  8384. .chan4: 
  8385.  st NoiseMade0RIGHT
  8386.  move.b d5,RIGHTPLAYEDTAB
  8387.  move.b d3,RIGHTPLAYEDTAB+1
  8388.  move.b d4,RIGHTPLAYEDTAB+2
  8389.  move.l a1,pos0RIGHT
  8390.  move.l a2,Samp0endRIGHT
  8391.  move.b d4,vol0right
  8392.  rts
  8393.  
  8394. .chan5:
  8395.  st NoiseMade1RIGHT
  8396.  move.b d5,RIGHTPLAYEDTAB+3
  8397.  move.b d3,RIGHTPLAYEDTAB+1+3
  8398.  move.b d4,RIGHTPLAYEDTAB+2+3
  8399.  move.b d3,vol1right
  8400.  move.l a1,pos1RIGHT
  8401.  move.l a2,Samp1endRIGHT
  8402.  rts
  8403.  
  8404. .chan6: 
  8405.  st NoiseMade2RIGHT
  8406.  move.b d5,RIGHTPLAYEDTAB+6
  8407.  move.b d3,RIGHTPLAYEDTAB+1+6
  8408.  move.b d4,RIGHTPLAYEDTAB+2+6
  8409.  move.l a1,pos2RIGHT
  8410.  move.l a2,Samp2endRIGHT
  8411.  move.b d3,vol2right
  8412.  rts
  8413.  
  8414. SampleList:
  8415.  dc.l Scream,EndScream
  8416.  dc.l Shoot,EndShoot
  8417.  dc.l Munch,EndMunch
  8418.  dc.l PooGun,EndPooGun
  8419.  dc.l Collect,EndCollect
  8420. ;5
  8421.  dc.l DoorNoise,EndDoorNoise
  8422.  dc.l 0,0
  8423.  dc.l Stomp,EndStomp
  8424.  dc.l LowScream,EndLowScream
  8425.  dc.l BaddieGun,EndBaddieGun
  8426. ;10
  8427.  dc.l SwitchNoise,EndSwitch
  8428.  dc.l Reload,EndReload
  8429.  dc.l NoAmmo,EndNoAmmo
  8430.  dc.l Splotch,EndSplotch
  8431.  dc.l SplatPop,EndSplatPop
  8432. ;15
  8433.  dc.l Boom,EndBoom
  8434.  dc.l Hiss,EndHiss
  8435.  dc.l Howl1,EndHowl1
  8436.  dc.l Howl2,EndHowl2
  8437.  dc.l Pant,EndPant
  8438. ;20
  8439.  dc.l Whoosh,EndWhoosh
  8440.  dc.l ROAR,EndROAR
  8441.  dc.l whoosh,Endwhoosh
  8442.  dc.l 0,0
  8443.  dc.l 0,0
  8444.  dc.l 0,0
  8445.  dc.l 0,0
  8446.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8447.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8448.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8449.  dc.l 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
  8450.  
  8451.  dc.l 0
  8452.  
  8453. storeval: dc.w 0
  8454.  
  8455.  include "ab3:source/wallchunk.s"
  8456.  include "ab3:source/loadfromdisk.s"
  8457.  include "ab3:source/screensetup.s"
  8458.  include "ab3:source/CONTROLLOOP.s"
  8459.  
  8460.  
  8461.  
  8462.  
  8463. saveinters:  
  8464.  dc.w 0
  8465.  
  8466. z: dc.w 10
  8467.  
  8468. notifplaying:
  8469.  dc.w 0
  8470.  
  8471. audpos1: dc.w 0
  8472. audpos1b: dc.w 0
  8473. audpos2: dc.w 0
  8474. audpos2b: dc.w 0
  8475. audpos3: dc.w 0
  8476. audpos3b: dc.w 0
  8477. audpos4: dc.w 0
  8478. audpos4b: dc.w 0
  8479.  
  8480. vol0left: dc.w 0
  8481. vol0right: dc.w 0
  8482. vol1left: dc.w 0
  8483. vol1right: dc.w 0
  8484. vol2left: dc.w 0
  8485. vol2right: dc.w 0
  8486. vol3left: dc.w 0
  8487. vol3right: dc.w 0
  8488.  
  8489. pos: dc.l 0
  8490.  
  8491. pos0LEFT: dc.l empty
  8492. pos1LEFT: dc.l empty
  8493. pos2LEFT: dc.l empty
  8494. pos3LEFT: dc.l empty
  8495. pos0RIGHT: dc.l empty
  8496. pos1RIGHT: dc.l empty
  8497. pos2RIGHT: dc.l empty
  8498. pos3RIGHT: dc.l empty
  8499.  
  8500. numtodo dc.w 0
  8501.  
  8502. npt: dc.w 0
  8503.  
  8504. pretab:
  8505. val SET 0
  8506.  REPT 128
  8507.  dc.b val
  8508. val SET val+1
  8509.  ENDR
  8510. val SET -128
  8511.  REPT 128
  8512.  dc.b val
  8513. val SET val+1
  8514.  ENDR 
  8515.  
  8516. tab:
  8517.  ds.b 256*65
  8518.  
  8519.  
  8520. test: dc.l 0
  8521.  ds.l 30
  8522.  
  8523.  even
  8524. ConstCols:
  8525. ; incbin "ConstCols"
  8526.  even
  8527. Smoothscalecols:
  8528. ; incbin "smoothbumppalscaled"
  8529.  even
  8530. SmoothTile:
  8531. ; incbin "smoothbumptile"
  8532.  even
  8533. Bumpscalecols:
  8534. ; incbin "Bumppalscaled"
  8535.  even
  8536. Bumptile:
  8537. ; incbin "bumptile"
  8538.  even
  8539. scalecols: ;incbin "bytepixpalscaled"
  8540.  even
  8541. floorscalecols:
  8542.  incbin "floorpalscaled"
  8543.  ds.w 256*4
  8544.  
  8545.  even
  8546. PaletteAddr: dc.l 0
  8547. ChunkAddr: dc.l 0
  8548. ;walltiles:
  8549. ; dc.l GreenMechanicWALL
  8550. ; dc.l BlueGreyMetalWALL
  8551. ; dc.l TechnoDetailWALL
  8552. ; dc.l BlueStoneWALL
  8553. ; dc.l RedAlertWALL
  8554. ; dc.l RockWALL
  8555. ;
  8556. ;GreenMechanicWALL: incbin "ab3:includes/walls/greenmechanic.wad"
  8557. ;BlueGreyMetalWALL: incbin "ab3:includes/walls/BlueGreyMetal.wad"
  8558. ;TechnoDetailWALL: incbin "ab3:includes/walls/TechnoDetail.wad"
  8559. ;BlueStoneWALL: incbin "ab3:includes/walls/bluestone.wad"
  8560. ;RedAlertWALL: incbin "ab3:includes/walls/redalert.wad"
  8561. ;RockWALL: incbin "ab3:includes/walls/rock.wad"
  8562.  
  8563. floortile:
  8564.  dc.l 0
  8565. ; incbin "floortile" 
  8566.  even
  8567. wallrouts:
  8568. ; incbin "2x2WallDraw" 
  8569.  CNOP 0,64
  8570. BackPicture:
  8571.  incbin "backfile"
  8572. EndBackPicture:
  8573.  
  8574. drawpt: dc.l 0
  8575. olddrawpt: dc.l 0
  8576. frompt: dc.l 0 
  8577.  
  8578. SineTable:
  8579.  incbin "bigsine"
  8580.  
  8581. angspd: dc.w 0
  8582. flooryoff: dc.w 0
  8583. xoff: dc.l 0
  8584. yoff: dc.l 0
  8585. yvel: dc.l 0
  8586. zoff: dc.l 0
  8587. tyoff: dc.l 0
  8588. xspdval: dc.l 0
  8589. zspdval: dc.l 0
  8590. Zone: dc.w 0
  8591.  
  8592. PLR1: dc.b $ff
  8593.  even
  8594. PLR1_energy: dc.w 191
  8595. PLR1_GunSelected: dc.w 0
  8596. PLR1_cosval: dc.w 0
  8597. PLR1_sinval: dc.w 0
  8598. PLR1_angpos: dc.w 0
  8599. PLR1_angspd: dc.w 0
  8600. PLR1_xoff: dc.l 0
  8601. PLR1_yoff: dc.l 0
  8602. PLR1_yvel: dc.l 0
  8603. PLR1_zoff: dc.l 0
  8604. PLR1_tyoff: dc.l 0
  8605. PLR1_xspdval: dc.l 0
  8606. PLR1_zspdval: dc.l 0
  8607. PLR1_Zone: dc.w 0
  8608. PLR1_Roompt: dc.l 0
  8609. PLR1_OldRoompt: dc.l 0
  8610. PLR1_PointsToRotatePtr: dc.l 0
  8611. PLR1_ListOfGraphRooms: dc.l 0
  8612. PLR1_oldxoff: dc.l 0
  8613. PLR1_oldzoff: dc.l 0
  8614. PLR1_StoodInTop: dc.b 0
  8615.  even
  8616. PLR1_height: dc.l 0
  8617.  
  8618.  ds.w 4
  8619.  
  8620. OLDX1: dc.l 0
  8621. OLDX2: dc.l 0
  8622. OLDZ1: dc.l 0
  8623. OLDZ2: dc.l 0
  8624.  
  8625. XDIFF1: dc.l 0
  8626. ZDIFF1: dc.l 0
  8627. XDIFF2: dc.l 0
  8628. ZDIFF2: dc.l 0
  8629.  
  8630. PLR1s_cosval: dc.w 0
  8631. PLR1s_sinval: dc.w 0
  8632. PLR1s_angpos: dc.w 0
  8633. PLR1s_angspd: dc.w 0
  8634. PLR1s_xoff: dc.l 0
  8635. PLR1s_yoff: dc.l 0
  8636. PLR1s_yvel: dc.l 0
  8637. PLR1s_zoff: dc.l 0
  8638. PLR1s_tyoff: dc.l 0
  8639. PLR1s_xspdval: dc.l 0
  8640. PLR1s_zspdval: dc.l 0
  8641. PLR1s_Zone: dc.w 0
  8642. PLR1s_Roompt: dc.l 0
  8643. PLR1s_OldRoompt: dc.l 0
  8644. PLR1s_PointsToRotatePtr: dc.l 0
  8645. PLR1s_ListOfGraphRooms: dc.l 0
  8646. PLR1s_oldxoff: dc.l 0
  8647. PLR1s_oldzoff: dc.l 0
  8648. PLR1s_height: dc.l 0
  8649. PLR1s_targheight: dc.l 0
  8650.  
  8651. p1_xoff: dc.l 0
  8652. p1_zoff: dc.l 0
  8653. p1_yoff: dc.l 0
  8654. p1_height: dc.l 0
  8655. p1_angpos: dc.w 0
  8656. p1_bobble: dc.w 0
  8657. p1_clicked: dc.b 0
  8658. p1_spctap: dc.b 0
  8659. p1_ducked: dc.b 0
  8660. p1_gunselected: dc.b 0
  8661. p1_fire: dc.b 0
  8662.  even
  8663. p1_holddown: dc.w 0
  8664.  
  8665.  ds.w 4
  8666.  
  8667. PLR2: dc.b $ff
  8668.  even
  8669. PLR2_GunSelected: dc.w 0
  8670. PLR2_energy: dc.w 191
  8671. PLR2_cosval: dc.w 0
  8672. PLR2_sinval: dc.w 0
  8673. PLR2_angpos: dc.w 0
  8674. PLR2_angspd: dc.w 0
  8675. PLR2_xoff: dc.l 0
  8676. PLR2_yoff: dc.l 0
  8677. PLR2_yvel: dc.l 0
  8678. PLR2_zoff: dc.l 0
  8679. PLR2_tyoff: dc.l 0
  8680. PLR2_xspdval: dc.l 0
  8681. PLR2_zspdval: dc.l 0
  8682. PLR2_Zone: dc.w 0
  8683. PLR2_Roompt: dc.l 0
  8684. PLR2_OldRoompt: dc.l 0
  8685. PLR2_PointsToRotatePtr: dc.l 0
  8686. PLR2_ListOfGraphRooms: dc.l 0
  8687. PLR2_oldxoff: dc.l 0
  8688. PLR2_oldzoff: dc.l 0
  8689. PLR2_StoodInTop: dc.b 0
  8690.  even
  8691. PLR2_height: dc.l 0
  8692.  
  8693.  ds.w 4
  8694.  
  8695. PLR2s_cosval: dc.w 0
  8696. PLR2s_sinval: dc.w 0
  8697. PLR2s_angpos: dc.w 0
  8698. PLR2s_angspd: dc.w 0
  8699. PLR2s_xoff: dc.l 0
  8700. PLR2s_yoff: dc.l 0
  8701. PLR2s_yvel: dc.l 0
  8702. PLR2s_zoff: dc.l 0
  8703. PLR2s_tyoff: dc.l 0
  8704. PLR2s_xspdval: dc.l 0
  8705. PLR2s_zspdval: dc.l 0
  8706. PLR2s_Zone: dc.w 0
  8707. PLR2s_Roompt: dc.l 0
  8708. PLR2s_OldRoompt: dc.l 0
  8709. PLR2s_PointsToRotatePtr: dc.l 0
  8710. PLR2s_ListOfGraphRooms: dc.l 0
  8711. PLR2s_oldxoff: dc.l 0
  8712. PLR2s_oldzoff: dc.l 0
  8713. PLR2s_height: dc.l 0
  8714. PLR2s_targheight: dc.l 0
  8715.  
  8716.  ds.w 4
  8717.  
  8718. p2_xoff: dc.l 0
  8719. p2_zoff: dc.l 0
  8720. p2_yoff: dc.l 0
  8721. p2_height: dc.l 0
  8722. p2_angpos: dc.w 0
  8723. p2_bobble: dc.w 0
  8724. p2_clicked: dc.b 0
  8725. p2_spctap: dc.b 0
  8726. p2_ducked: dc.b 0
  8727. p2_gunselected: dc.b 0
  8728. p2_fire: dc.b 0
  8729.  even
  8730. p2_holddown: dc.w 0
  8731.  
  8732.  
  8733. liftanimtab:
  8734.  
  8735.  
  8736. endliftanimtab:
  8737.  
  8738. glassball:
  8739. ; incbin "glassball.inc"
  8740. endglass
  8741. glassballpt: dc.l glassball
  8742.  
  8743. rndtab: ; incbin "randfile"
  8744. endrnd: 
  8745.  
  8746. brightanimtab:
  8747.  dcb.w 200,20
  8748.  dc.w 5
  8749.  dc.w 10,20
  8750.  dc.w 5
  8751.  dcb.w 30,20
  8752.  dc.w 7,10,10,5,10,0,5,6,5,6,5,6,5,6,0
  8753.  dcb.w 40,0
  8754.  dc.w 1,2,3,2,3,2,3,2,3,2,3,2,3,0
  8755.  dcb.w 300,0
  8756.  dc.w 1,0,1,0,2,2,2,5,5,5,5,5,5,5,5,5,6,10
  8757.  dc.w -1
  8758.  
  8759. Roompt: dc.l 0
  8760. OldRoompt: dc.l 0
  8761.  
  8762. *****************************************************************
  8763.  *
  8764.  include "AB3:source/LevelData2"
  8765.  *
  8766. *****************************************************************
  8767.  
  8768.  
  8769. wallpt: dc.l 0
  8770. floorpt: dc.l 0
  8771.  
  8772. Rotated:
  8773.  ds.l 2*800 
  8774. ObjRotated:
  8775.  ds.l 2*500
  8776.  
  8777. OnScreen:
  8778.  ds.l 2*800 
  8779.  
  8780. startwait: dc.w 0
  8781. endwait: dc.w 0
  8782.  
  8783. Faces:; incbin "faces2raw"
  8784.  
  8785. *******************************************************************
  8786.  
  8787. consttab:
  8788.  incbin "constantfile"
  8789.  
  8790. *******************************************************************
  8791.  
  8792.  
  8793.  
  8794. *********************************
  8795.  
  8796. ; include "ab3:source/loadmod.a"
  8797. ; include "ab3:source/proplayer.a"
  8798.  
  8799.  
  8800. darkentab: incbin "darkenedcols"
  8801. brightentab: incbin "brightenfile"
  8802. WorkSpace:
  8803.  ds.l 8192 
  8804. waterfile: incbin "waterfile"
  8805.  
  8806.  SECTION ffff,CODE_C
  8807.  
  8808. nullspr: dc.l 0
  8809.  
  8810.  cnop 0,8
  8811. borders:
  8812.  incbin "leftbord"
  8813.  incbin "rightbord"
  8814.  
  8815. health: incbin "healthstrip"
  8816. Ammunition: incbin "ammostrip"
  8817. healthpal: incbin "healthpal"
  8818. PanelKeys: incbin "greenkey"
  8819.  incbin "redkey"
  8820.  incbin "yellowkey"
  8821.  incbin "bluekey"
  8822.  
  8823. null: ds.w 500
  8824. null2: ds.w 500
  8825. null3: ds.w 500
  8826. null4: ds.w 500
  8827.  
  8828.  
  8829. Blurbfield:
  8830.  
  8831.  dc.w bpl1ptl
  8832. bl1l: dc.w 0
  8833.  dc.w bpl1pth
  8834. bl1h: dc.w 0
  8835.  
  8836.  dc.w diwstart,$2c81
  8837.  dc.w diwstop,$1cc1
  8838.  dc.w ddfstart,$38
  8839.  dc.w ddfstop,$b8
  8840.  dc.w bplcon0,$9201
  8841.  dc.w bplcon1,0
  8842.  dc.w $106,$c40
  8843. blcols:
  8844.  dc.w col0,0
  8845.  dc.w col1,$fff
  8846.  
  8847.  dc.w $108,0
  8848.  dc.w $10a,0
  8849.  
  8850.  dc.w $ffff,$fffe
  8851.  dc.w $ffff,$fffe
  8852.  
  8853. nullline:
  8854.  ds.b 80    
  8855.  
  8856.  include "ab3:source/titlecop.s"
  8857.  
  8858. bigfield:    
  8859.                 ; Start of our copper list.
  8860.  
  8861.  dc.w dmacon,$8020
  8862.  dc.w intreq,$8011
  8863.  dc.w $1fc,$f
  8864.  dc.w diwstart
  8865. winstart: dc.w $2cb1
  8866.  dc.w diwstop
  8867. winstop: dc.w $2c91
  8868.  dc.w ddfstart
  8869. fetchstart: dc.w $48
  8870.  dc.w ddfstop
  8871. fetchstop: dc.w $88
  8872.  
  8873. bordercols:
  8874.  incbin "borderpal"
  8875.  
  8876.  dc.w spr0ptl
  8877. s0l:
  8878.  dc.w 0
  8879.  dc.w spr0pth
  8880. s0h:
  8881.  dc.w 0
  8882.  dc.w spr1ptl
  8883. s1l:
  8884.  dc.w 0
  8885.  dc.w spr1pth
  8886. s1h:
  8887.  dc.w 0
  8888.  dc.w spr2ptl
  8889. s2l:
  8890.  dc.w 0
  8891.  dc.w spr2pth
  8892. s2h:
  8893.  dc.w 0
  8894.  dc.w spr3ptl
  8895. s3l:
  8896.  dc.w 0
  8897.  dc.w spr3pth
  8898. s3h:
  8899.  dc.w 0
  8900.  dc.w spr4ptl
  8901. s4l:
  8902.  dc.w 0
  8903.  dc.w spr4pth
  8904. s4h:
  8905.  dc.w 0
  8906.  dc.w spr5ptl
  8907. s5l:
  8908.  dc.w 0
  8909.  dc.w spr5pth
  8910. s5h:
  8911.  dc.w 0
  8912.  dc.w spr6ptl
  8913. s6l:
  8914.  dc.w 0
  8915.  dc.w spr6pth
  8916. s6h:
  8917.  dc.w 0
  8918.  dc.w spr7ptl
  8919. s7l:
  8920.  dc.w 0
  8921.  dc.w spr7pth
  8922. s7h:
  8923.  dc.w 0
  8924.  
  8925.  
  8926.  dc.w $106,$c42
  8927.  incbin "borderpal"
  8928.  
  8929.  dc.w $106,$8c42
  8930.  dc.w col0
  8931. hitcol: dc.w $0
  8932.  dc.w $106,$c42
  8933.  dc.w col0
  8934. hitcol2: dc.w 0
  8935.  
  8936.  dc.w bplcon0,$7201
  8937.  dc.w bplcon1
  8938. smoff:
  8939.  dc.w $0
  8940.  
  8941.  dc.w $108
  8942. modulo: dc.w -24
  8943.  dc.w $10a,-24
  8944.  
  8945.  dc.w bpl1pth
  8946. pl1h
  8947.  dc.w 0
  8948.  
  8949.  dc.w bpl1ptl
  8950. pl1l
  8951.  dc.w 0
  8952.  
  8953.  dc.w bpl2pth
  8954. pl2h
  8955.  dc.w 0
  8956.  
  8957.  dc.w bpl2ptl
  8958. pl2l
  8959.  dc.w 0
  8960.  
  8961.  dc.w bpl3pth
  8962. pl3h
  8963.  dc.w 0
  8964.  
  8965.  dc.w bpl3ptl
  8966. pl3l
  8967.  dc.w 0
  8968.  
  8969.  dc.w bpl4pth
  8970. pl4h
  8971.  dc.w 0
  8972.  
  8973.  dc.w bpl4ptl
  8974. pl4l
  8975.  dc.w 0
  8976.  
  8977.  dc.w bpl5pth
  8978. pl5h
  8979.  dc.w 0
  8980.  
  8981.  dc.w bpl5ptl
  8982. pl5l
  8983.  dc.w 0
  8984.  
  8985.  dc.w bpl6pth
  8986. pl6h
  8987.  dc.w 0
  8988.  
  8989.  dc.w bpl6ptl
  8990. pl6l
  8991.  dc.w 0
  8992.  
  8993.  dc.w bpl7pth
  8994. pl7h
  8995.  dc.w 0
  8996.  
  8997.  dc.w bpl7ptl
  8998. pl7l
  8999.  dc.w 0
  9000.  
  9001.  
  9002.  dc.w $1001,$ff00
  9003.  dc.w intreq,$11
  9004. yposcop:
  9005.  dc.w $2a11,$fffe
  9006.  dc.w $8a,0
  9007.  
  9008. ; ds.l 104*12
  9009.  
  9010. ;colbars:
  9011. ;val SET $2a
  9012. ; dcb.l 104*80,$1fe0000
  9013. ; dc.w $106,$c42
  9014. ; dc.w $80
  9015. ;pch1:
  9016. ; dc.w 0
  9017. ; dc.w $82
  9018. ;pcl1:
  9019. ; dc.w 0 
  9020. ; dc.w $88,0
  9021. ; dc.w $ffff,$fffe       ; End copper list.
  9022.  
  9023. ; ds.l 104*12
  9024.  
  9025. ;colbars2:
  9026. ;val SET $2a
  9027. ; dcb.l 104*80,$1fe0000
  9028. ; dc.w $106,$c42
  9029. ; dc.w $80
  9030. ;pch2:
  9031. ; dc.w 0
  9032. ; dc.w $82
  9033. ;pcl2:
  9034. ; dc.w 0
  9035. ; dc.w $88,0
  9036. ; dc.w $ffff,$fffe       ; End copper list.
  9037.  
  9038. ; ds.l 104*10
  9039.  
  9040. NullCopper:
  9041.  dc.w $ffff,$fffe
  9042.  
  9043. old: dc.l 0
  9044.  
  9045. prot5: dc.w 0
  9046. PanelCop:
  9047.  
  9048.  dc.w $80
  9049. och:
  9050.  dc.w 0
  9051.  dc.w $82
  9052. ocl:
  9053.  dc.w 0
  9054.  
  9055. statskip:
  9056.  dc.w $1fe,0
  9057.  dc.w $1fe,0
  9058.  
  9059.  dc.w $10c,0
  9060.  dc.w bplcon0,$1201
  9061.  dc.w bpl1ptl
  9062. n1l:
  9063.  dc.w 0
  9064.  dc.w bpl1pth
  9065. n1h:
  9066.  dc.w 0
  9067.  dc.w $108,-24
  9068.  incbin "Panelpal"
  9069.  
  9070.  dc.w bpl2pth
  9071. p2h
  9072.  dc.w 0
  9073.  
  9074.  dc.w bpl2ptl
  9075. p2l
  9076.  dc.w 0
  9077.  
  9078.  dc.w bpl3pth
  9079. p3h
  9080.  dc.w 0
  9081.  
  9082.  dc.w bpl3ptl
  9083. p3l
  9084.  dc.w 0
  9085.  
  9086.  dc.w bpl4pth
  9087. p4h
  9088.  dc.w 0
  9089.  dc.w bpl4ptl
  9090. p4l
  9091.  dc.w 0
  9092.  dc.w bpl5pth
  9093. p5h
  9094.  dc.w 0
  9095.  dc.w bpl5ptl
  9096. p5l
  9097.  dc.w 0
  9098.  dc.w bpl6pth
  9099. p6h
  9100.  dc.w 0
  9101.  dc.w bpl6ptl
  9102. p6l
  9103.  dc.w 0
  9104.  dc.w bpl7pth
  9105. p7h
  9106.  dc.w 0
  9107.  dc.w bpl7ptl
  9108. p7l
  9109.  dc.w 0
  9110.  dc.w bpl8pth
  9111. p8h
  9112.  dc.w 0
  9113.  dc.w bpl8ptl
  9114. p8l
  9115.  dc.w 0
  9116.  
  9117.  
  9118.  dc.w ddfstart,$38
  9119.  dc.w ddfstop,$b8
  9120.  dc.w diwstart,$2c81
  9121.  dc.w diwstop,$2cc1
  9122.  
  9123.  dc.w bplcon0
  9124. Panelcon: dc.w $0211
  9125.  dc.w bpl1pth
  9126. p1h
  9127.  dc.w 0
  9128.  
  9129.  dc.w bpl1ptl
  9130. p1l
  9131.  dc.w 0
  9132.  
  9133.  
  9134.  dc.w $108,40*7
  9135.  dc.w $10a,40*7
  9136.  
  9137.  dc.w $ffff,$fffe
  9138.  
  9139.  dc.w $180,$fff
  9140.  
  9141.  
  9142.  dc.w $f801,$ff00
  9143.  dc.w col1,$50
  9144.  dc.w $f901,$ff00
  9145.  dc.w col1,$90
  9146.  dc.w $fa01,$ff00
  9147.  dc.w col1,$f0
  9148.  dc.w $fb01,$ff00
  9149.  dc.w col1,$f0
  9150.  dc.w $fc01,$ff00
  9151.  dc.w col1,$90
  9152.  dc.w $fd01,$ff00
  9153.  dc.w col1,$50
  9154.  
  9155.  dc.w $fe01,$ff00
  9156.  dc.w col1,$fff
  9157.  
  9158.  dc.w $ffdf,$fffe
  9159.  dc.w $a01,$ff00
  9160.  dc.w bplcon0,$201
  9161.  
  9162.  incbin "faces2cols"
  9163.  dc.w bpl1pth
  9164. f1h
  9165.  dc.w 0
  9166.  
  9167.  dc.w bpl1ptl
  9168. f1l
  9169.  dc.w 0
  9170.  
  9171.  dc.w bpl2pth
  9172. f2h
  9173.  dc.w 0
  9174.  
  9175.  dc.w bpl2ptl
  9176. f2l
  9177.  dc.w 0
  9178.  
  9179.  dc.w bpl3pth
  9180. f3h
  9181.  dc.w 0
  9182.  
  9183.  dc.w bpl3ptl
  9184. f3l
  9185.  dc.w 0
  9186.  
  9187.  dc.w bpl4pth
  9188. f4h
  9189.  dc.w 0
  9190.  dc.w bpl4ptl
  9191. f4l
  9192.  dc.w 0
  9193.  
  9194.  dc.w bpl5pth
  9195. f5h
  9196.  dc.w 0
  9197.  dc.w bpl5ptl
  9198. f5l
  9199.  dc.w 0
  9200.  
  9201.  dc.w $0c01,$ff00
  9202.  dc.w bplcon0,$5201
  9203.   
  9204.  dc.w $ffff,$fffe
  9205.  
  9206.  cnop 0,64
  9207. FacePlace:
  9208. ; ds.l 6*32*5
  9209.  
  9210. TEXTSCRN: dc.l 0
  9211.  
  9212. TEXTCOP:
  9213.  dc.w intreq,$8030
  9214.  
  9215.  dc.w spr0ptl
  9216. txs0l:
  9217.  dc.w 0
  9218.  dc.w spr0pth
  9219. txs0h:
  9220.  dc.w 0
  9221.  dc.w spr1ptl
  9222. txs1l:
  9223.  dc.w 0
  9224.  dc.w spr1pth
  9225. txs1h:
  9226.  dc.w 0
  9227.  dc.w spr2ptl
  9228. txs2l:
  9229.  dc.w 0
  9230.  dc.w spr2pth
  9231. txs2h:
  9232.  dc.w 0
  9233.  dc.w spr3ptl
  9234. txs3l:
  9235.  dc.w 0
  9236.  dc.w spr3pth
  9237. txs3h:
  9238.  dc.w 0
  9239.  dc.w spr4ptl
  9240. txs4l:
  9241.  dc.w 0
  9242.  dc.w spr4pth
  9243. txs4h:
  9244.  dc.w 0
  9245.  dc.w spr5ptl
  9246. txs5l:
  9247.  dc.w 0
  9248.  dc.w spr5pth
  9249. txs5h:
  9250.  dc.w 0
  9251.  dc.w spr6ptl
  9252. txs6l:
  9253.  dc.w 0
  9254.  dc.w spr6pth
  9255. txs6h:
  9256.  dc.w 0
  9257.  dc.w spr7ptl
  9258. txs7l:
  9259.  dc.w 0
  9260.  dc.w spr7pth
  9261. txs7h:
  9262.  dc.w 0
  9263.  
  9264.  
  9265.  dc.w $10c,$0088
  9266.  
  9267.  dc.w $1fc,$f
  9268.  dc.w diwstart,$2c81    ; Top left corner of screen.
  9269.  dc.w diwstop,$2cc1     ; Bottom right corner of screen.
  9270.  dc.w ddfstart,$38      ; Data fetch start.
  9271.  dc.w ddfstop,$c8       ; Data fetch stop.
  9272.  
  9273.  dc.w bplcon0
  9274. TSCP:
  9275.  dc.w $9201
  9276.  
  9277.  dc.w $106,$c40
  9278.  
  9279.  dc.w $2a01,$ff00
  9280.  
  9281.  dc.w col0,0
  9282.  dc.w col1
  9283. TOPLET:
  9284. TXTCOLL:
  9285.  dc.w 0
  9286.   dc.w col2
  9287. BOTLET:
  9288.  dc.w 0
  9289.  dc.w col3
  9290. ALLTEXT:
  9291.  dc.w $fff
  9292.  dc.w $106,$e40
  9293.  dc.w col3
  9294. ALLTEXTLOW:
  9295.  dc.w $0
  9296.  
  9297.  
  9298.  dc.w bpl1pth
  9299. TSPTh:
  9300.  dc.w 0
  9301.  dc.w bpl1ptl
  9302. TSPTl:
  9303.  dc.w 0
  9304.  
  9305.  dc.w bpl2pth
  9306. TSPTh2:
  9307.  dc.w 0
  9308.  dc.w bpl2ptl
  9309. TSPTl2:
  9310.  dc.w 0
  9311.  
  9312.  
  9313.  dc.w $108,0
  9314.  dc.w $10a,0
  9315.  
  9316.  dc.w $ffff,$fffe
  9317.  
  9318. ********************************************
  9319. * Stuff you don't have to worry about yet. *
  9320. ********************************************
  9321.  
  9322. closeeverything:
  9323.  
  9324.  jsr mt_end
  9325.  
  9326.  move.l #nullcop,d0
  9327. ; move.l old,d0
  9328.  
  9329.  move.l #$dff000,a6
  9330.  move.l d0,$dff080     ; Restore old copper list.
  9331.  move.w d0,ocl
  9332.  swap d0
  9333.  move.w d0,och
  9334.  
  9335.  move.w #3,d0
  9336. nonewvbl
  9337.  btst #5,intreqrl(a6)
  9338.  beq.s nonewvbl
  9339.  move.w #$20,intreq(a6)
  9340.  dbra d0,nonewvbl
  9341.  
  9342.  move.w #$8020,dmacon(a6)
  9343.  move.w #$f,dmacon(a6)
  9344.  
  9345.  move.l 4.w,a6
  9346.  lea VBLANKInt,a1
  9347.  moveq #5,d0
  9348.  jsr _LVORemIntServer(a6)
  9349.  
  9350.  IFEQ CD32VER
  9351.  move.l OLDKINT,$68.w
  9352.  ENDC
  9353.  move.w saveinters,d0
  9354.  or.w #$c000,d0
  9355.  move.w d0,intena(a6)
  9356.  clr.w $dff0a8
  9357.  clr.w $dff0b8
  9358.  clr.w $dff0c8
  9359.  clr.w $dff0d8
  9360.  
  9361.  
  9362. ; move.l oldview,a1
  9363. ; move.l a1,d0
  9364. ; move.l gfxbase,a6
  9365. ; jsr -$de(a6)
  9366.  
  9367. ; cmp.b #'s',mors
  9368. ; beq.s leaveold
  9369. ; move.w #$f8e,$dff1dc
  9370. ;leaveold:
  9371.  
  9372.  jsr RELEASELEVELMEM
  9373.  jsr RELEASESCRNMEM
  9374.  
  9375.  move.l #0,d0
  9376.  
  9377.  rte
  9378.  
  9379.  
  9380.  
  9381. intbase: dc.l 0
  9382. gfxbase: dc.l 0
  9383. oldview: dc.l 0
  9384.  
  9385. stuff:
  9386.  
  9387.     PRSDL
  9388.     Lea    gfxname(pc),a1    
  9389.     Moveq.l    #0,d0
  9390.     Move.l    $4.w,a6    
  9391.     Jsr    -$228(a6)
  9392.     add.w d1,RVAL1
  9393.     Move.l     d0,gfxbase
  9394.     Move.l    d0,a6                Use As Base Reg
  9395.     Move.l    34(a6),oldview
  9396.     move.l 38(a6),old
  9397.     rts
  9398.  
  9399. gfxname dc.b "graphics.library",0
  9400.  even
  9401. INTUNAME    dc.b    "intuition.library",0
  9402.  
  9403.  even
  9404.  
  9405.  
  9406.  cnop 0,64
  9407.  
  9408. Panel:
  9409.  dc.l 0
  9410.  
  9411. TimerScr: 
  9412. ;ds.b 40*64
  9413.  
  9414. scrntab:
  9415.  ds.b 16
  9416. val SET 32
  9417.  REPT 96
  9418.  dc.b val,val,val
  9419. val SET val+1
  9420.  ENDR
  9421.  ds.b 16
  9422.  
  9423. smallscrntab:
  9424. val SET 32
  9425.  REPT 96
  9426.  dc.b val,val
  9427. val SET val+1
  9428.  ENDR
  9429.  
  9430.  cnop 0,64
  9431. scrn:
  9432.  
  9433.  dcb.l 8,$33333333
  9434.  dc.l 0
  9435.  dc.l 0
  9436.  
  9437.  dcb.l 8,$0f0f0f0f
  9438.  dc.l 0
  9439.  dc.l 0
  9440.  
  9441.  dcb.l 8,$00ff00ff
  9442.  dc.l 0
  9443.  dc.l 0
  9444.  
  9445.  dcb.l 8,$0000ffff
  9446.  dc.l 0
  9447.  dc.l 0
  9448.  
  9449.  dc.l 0,-1,0,-1,0,-1,0,-1
  9450.  dc.l 0
  9451.  dc.l 0
  9452.  
  9453.  dc.l -1,-1,0,0,-1,-1,0,0
  9454.  dc.l 0
  9455.  dc.l 0
  9456.  
  9457.  dc.l 0,0,-1,-1,-1,-1,-1,-1
  9458.  dc.l 0
  9459.  dc.l 0
  9460.  
  9461. NumTimes: dc.l 0
  9462. TimeCount: dc.l 0
  9463. oldtime: dc.l 0
  9464. counting: dc.b 0
  9465. oktodisplay: dc.b 0
  9466.  
  9467. INITTIMER:
  9468.  move.l #0,TimeCount
  9469.  move.l #0,NumTimes
  9470.  rts
  9471.  
  9472. STARTCOUNT:
  9473.  move.l d0,-(a7)
  9474.  move.l $dff004,d0
  9475.  and.l #$1ffff,d0
  9476.  move.l d0,oldtime
  9477.  st counting
  9478.  move.l (a7)+,d0
  9479.  rts
  9480.  
  9481. STOPCOUNT:
  9482.  move.l d0,-(a7)
  9483.  move.l $dff004,d0
  9484.  and.l #$1ffff,d0
  9485.  
  9486.  sub.l oldtime,d0
  9487.  cmp.l #-256,d0
  9488.  bge.s okcount
  9489.  add.l #313*256,d0
  9490. okcount:
  9491.  add.l d0,TimeCount
  9492.  addq.l #1,NumTimes
  9493.  clr.b counting
  9494.  move.l (a7)+,d0
  9495.  rts
  9496.  
  9497. STOPCOUNTNOADD:
  9498.  move.l d0,-(a7)
  9499.  move.l $dff004,d0
  9500.  and.l #$1ffff,d0
  9501.  
  9502.  sub.l oldtime,d0
  9503.  cmp.l #-256,d0
  9504.  bge.s okcount2
  9505.  add.l #313*256,d0
  9506. okcount2:
  9507.  add.l d0,TimeCount
  9508.  clr.b counting
  9509.  move.l (a7)+,d0
  9510.  rts
  9511.  
  9512. maxbot: dc.w 0
  9513. tstneg: dc.l 0
  9514.  
  9515. STOPTIMER:
  9516.  st oktodisplay
  9517.  rts
  9518.  
  9519. digits: incbin "numbers.inc"
  9520.  
  9521.  
  9522.  Section Sounds,CODE_C
  9523.  
  9524. nullcop:
  9525.  dc.w $106,$c40
  9526.  dc.w $180,0 
  9527.  dc.w $100,$0
  9528.  dc.w $ffff,$fffe
  9529.  
  9530. Scream:
  9531. ; incbin "ab3:sounds/Scream"
  9532. ; ds.w 100
  9533. EndScream:
  9534. LowScream:
  9535. ; incbin "ab3:sounds/LowScream"
  9536. ; ds.w 100
  9537. EndLowScream:
  9538. BaddieGun:
  9539. ; incbin "ab3:sounds/BaddieGun"
  9540. EndBaddieGun:
  9541. bass:
  9542. ; incbin "ab3:sounds/backbass+drum"
  9543. bassend:
  9544. Shoot:
  9545. ; incbin "ab3:sounds/fire!"
  9546. EndShoot:
  9547. Munch:
  9548. ; incbin "ab3:sounds/munch"
  9549. EndMunch:
  9550. PooGun:
  9551. ; incbin "ab3:sounds/shoot.dm"
  9552. EndPooGun:
  9553. Collect:
  9554. ; incbin "ab3:sounds/collect"
  9555. EndCollect:
  9556. DoorNoise:
  9557. ; incbin "ab3:sounds/newdoor"
  9558. EndDoorNoise:
  9559. Stomp:
  9560. ; incbin "ab3:sounds/footstep3"
  9561. EndStomp:
  9562. SwitchNoise:
  9563. ; incbin "ab3:sounds/switch"
  9564. EndSwitch:
  9565. Reload:
  9566. ; incbin "ab3:sounds/switch1.SFX"
  9567. EndReload:
  9568. NoAmmo:
  9569. ; incbin "ab3:sounds/noammo"
  9570. EndNoAmmo:
  9571. Splotch:
  9572. ; incbin "ab3:sounds/splotch"
  9573. EndSplotch:
  9574. SplatPop:
  9575. ; incbin "ab3:sounds/splatpop"
  9576. EndSplatPop:
  9577. Boom:
  9578. ; incbin "ab3:sounds/boom"
  9579. EndBoom:
  9580. Hiss:
  9581. ; incbin "ab3:sounds/newhiss"
  9582. EndHiss:
  9583. Howl1:
  9584. ; incbin "ab3:sounds/howl1"
  9585. EndHowl1:
  9586. Howl2:
  9587. ; incbin "ab3:sounds/howl2"
  9588. EndHowl2:
  9589. Pant:
  9590. ; incbin "ab3:sounds/pant"
  9591. EndPant:
  9592. Whoosh:
  9593. ; incbin "ab3:sounds/whoosh"
  9594. EndWhoosh:
  9595. ROAR:
  9596. ; incbin "ab3:sounds/bigscream"
  9597. EndROAR
  9598. whoosh:
  9599. ; incbin "ab3:sounds/flame"
  9600. Endwhoosh:
  9601.  SECTION music,code_c
  9602.  
  9603. UseAllChannels: dc.w 0
  9604.  
  9605. mt_init:move.l    mt_data,a0
  9606.     move.l    a0,a1
  9607.     add.l    #$3b8,a1
  9608.     moveq    #$7f,d0
  9609.     moveq    #0,d1
  9610. mt_loop:move.l    d1,d2
  9611.     subq.w    #1,d0
  9612. mt_lop2:move.b    (a1)+,d1
  9613.     cmp.b    d2,d1
  9614.     bgt.s    mt_loop
  9615.     dbf    d0,mt_lop2
  9616.     addq.b    #1,d2
  9617.  
  9618.     lea    mt_samplestarts(pc),a1
  9619.     asl.l    #8,d2
  9620.     asl.l    #2,d2
  9621.     add.l    #$43c,d2
  9622.     add.l    a0,d2
  9623.     move.l    d2,a2
  9624.     moveq    #$1e,d0
  9625. mt_lop3:clr.l    (a2)
  9626.     move.l    a2,(a1)+
  9627.     moveq    #0,d1
  9628.     move.w    42(a0),d1
  9629.     asl.l    #1,d1
  9630.     add.l    d1,a2
  9631.     add.l    #$1e,a0
  9632.     dbf    d0,mt_lop3
  9633.  
  9634.     or.b    #$2,$bfe001
  9635.     move.b    #$6,mt_speed
  9636.     clr.w    $dff0a8
  9637.     clr.w    $dff0b8
  9638.     clr.w    $dff0c8
  9639.     clr.w    $dff0d8
  9640.     clr.b    mt_songpos
  9641.     clr.b    mt_counter
  9642.     clr.w    mt_pattpos
  9643.     rts
  9644.  
  9645. mt_end:    clr.w    $dff0a8
  9646.     clr.w    $dff0b8
  9647.     clr.w    $dff0c8
  9648.     clr.w    $dff0d8
  9649.     move.w    #$f,$dff096
  9650.     rts
  9651.  
  9652. mt_music:
  9653.     movem.l    d0-d4/a0-a3/a5-a6,-(a7)
  9654.     move.l    mt_data,a0
  9655.     addq.b    #$1,mt_counter
  9656.     move.b    mt_counter,D0
  9657.     cmp.b    mt_speed,D0
  9658.     blt.s    mt_nonew
  9659.     clr.b    mt_counter
  9660.     bra    mt_getnew
  9661.  
  9662. mt_nonew:
  9663.     lea    mt_voice1(pc),a6
  9664.     lea    $dff0a0,a5
  9665.     bsr    mt_checkcom
  9666.     lea    mt_voice2(pc),a6
  9667.     lea    $dff0b0,a5
  9668.     bsr    mt_checkcom
  9669.     tst.b UseAllChannels
  9670.     beq mt_endr
  9671.      lea    mt_voice3(pc),a6
  9672.     lea    $dff0c0,a5
  9673.     bsr    mt_checkcom
  9674.     lea    mt_voice4(pc),a6
  9675.     lea    $dff0d0,a5
  9676.     bsr    mt_checkcom
  9677.     bra    mt_endr
  9678.  
  9679. mt_arpeggio:
  9680.     moveq    #0,d0
  9681.     move.b    mt_counter,d0
  9682.     divs    #$3,d0
  9683.     swap    d0
  9684.     cmp.w    #$0,d0
  9685.     beq.s    mt_arp2
  9686.     cmp.w    #$2,d0
  9687.     beq.s    mt_arp1
  9688.  
  9689.     moveq    #0,d0
  9690.     move.b    $3(a6),d0
  9691.     lsr.b    #4,d0
  9692.     bra.s    mt_arp3
  9693. mt_arp1:moveq    #0,d0
  9694.     move.b    $3(a6),d0
  9695.     and.b    #$f,d0
  9696.     bra.s    mt_arp3
  9697. mt_arp2:move.w    $10(a6),d2
  9698.     bra.s    mt_arp4
  9699. mt_arp3:asl.w    #1,d0
  9700.     moveq    #0,d1
  9701.     move.w    $10(a6),d1
  9702.     lea    mt_periods(pc),a0
  9703.     moveq    #$24,d7
  9704. mt_arploop:
  9705.     move.w    (a0,d0.w),d2
  9706.     cmp.w    (a0),d1
  9707.     bge.s    mt_arp4
  9708.     addq.l    #2,a0
  9709.     dbf    d7,mt_arploop
  9710.     rts
  9711. mt_arp4:move.w    d2,$6(a5)
  9712.     rts
  9713.  
  9714. mt_getnew:
  9715.     move.l    mt_data,a0
  9716.     move.l    a0,a3
  9717.     move.l    a0,a2
  9718.     add.l    #$c,a3
  9719.     add.l    #$3b8,a2
  9720.     add.l    #$43c,a0
  9721.  
  9722.     moveq    #0,d0
  9723.     move.l    d0,d1
  9724.     move.b    mt_songpos,d0
  9725.     move.b    (a2,d0.w),d1
  9726.     asl.l    #8,d1
  9727.     asl.l    #2,d1
  9728.     add.w    mt_pattpos,d1
  9729.     clr.w    mt_dmacon
  9730.  
  9731.     lea    $dff0a0,a5
  9732.     lea    mt_voice1(pc),a6
  9733.     bsr    mt_playvoice
  9734.     lea    $dff0b0,a5
  9735.     lea    mt_voice2(pc),a6
  9736.     bsr    mt_playvoice
  9737.     tst.b UseAllChannels
  9738.     beq mt_setdma
  9739.     lea    $dff0c0,a5
  9740.     lea    mt_voice3(pc),a6
  9741.     bsr    mt_playvoice
  9742.     lea    $dff0d0,a5
  9743.     lea    mt_voice4(pc),a6
  9744.     bsr    mt_playvoice
  9745.     bra    mt_setdma
  9746.  
  9747. PROTCALC:
  9748. ;    include "ab3:source/protcalc.s"
  9749.     incbin "ab3:includes/protcalc.bin"
  9750. ENDPROTCALC:
  9751.  
  9752. mt_playvoice:
  9753.     move.l    (a0,d1.l),(a6)
  9754.     addq.l    #4,d1
  9755.     moveq    #0,d2
  9756.     move.b    $2(a6),d2
  9757.     and.b    #$f0,d2
  9758.     lsr.b    #4,d2
  9759.     move.b    (a6),d0
  9760.     and.b    #$f0,d0
  9761.     or.b    d0,d2
  9762.     tst.b    d2
  9763.     beq.s    mt_setregs
  9764.     moveq    #0,d3
  9765.     lea    mt_samplestarts(pc),a1
  9766.     move.l    d2,d4
  9767.     subq.l    #$1,d2
  9768.     asl.l    #2,d2
  9769.     mulu    #$1e,d4
  9770.     move.l    (a1,d2.l),$4(a6)
  9771.     move.w    (a3,d4.l),$8(a6)
  9772.     move.w    $2(a3,d4.l),$12(a6)
  9773.     move.w    $4(a3,d4.l),d3
  9774.     tst.w    d3
  9775.     beq.s    mt_noloop
  9776.     move.l    $4(a6),d2
  9777.     asl.w    #1,d3
  9778.     add.l    d3,d2
  9779.     move.l    d2,$a(a6)
  9780.     move.w    $4(a3,d4.l),d0
  9781.     add.w    $6(a3,d4.l),d0
  9782.     move.w    d0,8(a6)
  9783.     move.w    $6(a3,d4.l),$e(a6)
  9784.     move.w    $12(a6),d0
  9785.     asr.w #2,d0
  9786.     move.w d0,$8(a5)
  9787.     bra.s    mt_setregs
  9788. mt_noloop:
  9789.     move.l    $4(a6),d2
  9790.     add.l    d3,d2
  9791.     move.l    d2,$a(a6)
  9792.     move.w    $6(a3,d4.l),$e(a6)
  9793.     move.w    $12(a6),d0
  9794.     asr.w #2,d0
  9795.     move.w d0,$8(a5)
  9796. mt_setregs:
  9797.     move.w    (a6),d0
  9798.     and.w    #$fff,d0
  9799.     beq    mt_checkcom2
  9800.     move.b    $2(a6),d0
  9801.     and.b    #$F,d0
  9802.     cmp.b    #$3,d0
  9803.     bne.s    mt_setperiod
  9804.     bsr    mt_setmyport
  9805.     bra    mt_checkcom2
  9806. mt_setperiod:
  9807.     move.w    (a6),$10(a6)
  9808.     and.w    #$fff,$10(a6)
  9809.     move.w    $14(a6),d0
  9810.     move.w    d0,$dff096
  9811.     clr.b    $1b(a6)
  9812.  
  9813.     move.l    $4(a6),(a5)
  9814.     move.w    $8(a6),$4(a5)
  9815.     move.w    $10(a6),d0
  9816.     and.w    #$fff,d0
  9817.     move.w    d0,$6(a5)
  9818.     move.w    $14(a6),d0
  9819.     or.w    d0,mt_dmacon
  9820.     bra    mt_checkcom2
  9821.  
  9822. mt_setdma:
  9823.      move.w #250,d0
  9824. mt_wait:
  9825.      add.w #1,testchip
  9826.      dbra d0,mt_wait
  9827.     move.w    mt_dmacon,d0
  9828.     or.w    #$8000,d0
  9829.     and.w #%1111111111110011,d0
  9830.     move.w    d0,$dff096
  9831.     move.w #250,d0
  9832. mt_wait2:
  9833.     add.w #1,testchip
  9834.     dbra    d0,mt_wait2
  9835.     lea    $dff000,a5
  9836.     tst.b UseAllChannels
  9837.     beq.s noall
  9838.     lea    mt_voice4(pc),a6
  9839.     move.l    $a(a6),$d0(a5)
  9840.     move.w    $e(a6),$d4(a5)
  9841.     lea    mt_voice3(pc),a6
  9842.     move.l    $a(a6),$c0(a5)
  9843.     move.w    $e(a6),$c4(a5)
  9844. noall:
  9845.     lea    mt_voice2(pc),a6
  9846.     move.l    $a(a6),$b0(a5)
  9847.     move.w    $e(a6),$b4(a5)
  9848.     lea    mt_voice1(pc),a6
  9849.     move.l    $a(a6),$a0(a5)
  9850.     move.w    $e(a6),$a4(a5)
  9851.  
  9852.     add.w    #$10,mt_pattpos
  9853.     cmp.w    #$400,mt_pattpos
  9854.     bne.s    mt_endr
  9855. mt_nex:    clr.w    mt_pattpos
  9856.     clr.b    mt_break
  9857.     addq.b    #1,mt_songpos
  9858.     and.b    #$7f,mt_songpos
  9859.     move.b    mt_songpos,d1
  9860. ;    cmp.b    mt_data+$3b6,d1
  9861. ;    bne.s    mt_endr
  9862. ;    move.b    mt_data+$3b7,mt_songpos
  9863. mt_endr:tst.b    mt_break
  9864.     bne.s    mt_nex
  9865.     movem.l    (a7)+,d0-d4/a0-a3/a5-a6
  9866.     rts
  9867.  
  9868. mt_setmyport:
  9869.     move.w    (a6),d2
  9870.     and.w    #$fff,d2
  9871.     move.w    d2,$18(a6)
  9872.     move.w    $10(a6),d0
  9873.     clr.b    $16(a6)
  9874.     cmp.w    d0,d2
  9875.     beq.s    mt_clrport
  9876.     bge.s    mt_rt
  9877.     move.b    #$1,$16(a6)
  9878.     rts
  9879. mt_clrport:
  9880.     clr.w    $18(a6)
  9881. mt_rt:    rts
  9882.  
  9883. CODESTORE: dc.l 0
  9884.  
  9885. mt_myport:
  9886.     move.b    $3(a6),d0
  9887.     beq.s    mt_myslide
  9888.     move.b    d0,$17(a6)
  9889.     clr.b    $3(a6)
  9890. mt_myslide:
  9891.     tst.w    $18(a6)
  9892.     beq.s    mt_rt
  9893.     moveq    #0,d0
  9894.     move.b    $17(a6),d0
  9895.     tst.b    $16(a6)
  9896.     bne.s    mt_mysub
  9897.     add.w    d0,$10(a6)
  9898.     move.w    $18(a6),d0
  9899.     cmp.w    $10(a6),d0
  9900.     bgt.s    mt_myok
  9901.     move.w    $18(a6),$10(a6)
  9902.     clr.w    $18(a6)
  9903. mt_myok:move.w    $10(a6),$6(a5)
  9904.     rts
  9905. mt_mysub:
  9906.     sub.w    d0,$10(a6)
  9907.     move.w    $18(a6),d0
  9908.     cmp.w    $10(a6),d0
  9909.     blt.s    mt_myok
  9910.     move.w    $18(a6),$10(a6)
  9911.     clr.w    $18(a6)
  9912.     move.w    $10(a6),$6(a5)
  9913.     rts
  9914.  
  9915. mt_vib:    move.b    $3(a6),d0
  9916.     beq.s    mt_vi
  9917.     move.b    d0,$1a(a6)
  9918.  
  9919. mt_vi:    move.b    $1b(a6),d0
  9920.     lea    mt_sin(pc),a4
  9921.     lsr.w    #$2,d0
  9922.     and.w    #$1f,d0
  9923.     moveq    #0,d2
  9924.     move.b    (a4,d0.w),d2
  9925.     move.b    $1a(a6),d0
  9926.     and.w    #$f,d0
  9927.     mulu    d0,d2
  9928.     lsr.w    #$6,d2
  9929.     move.w    $10(a6),d0
  9930.     tst.b    $1b(a6)
  9931.     bmi.s    mt_vibmin
  9932.     add.w    d2,d0
  9933.     bra.s    mt_vib2
  9934. mt_vibmin:
  9935.     sub.w    d2,d0
  9936. mt_vib2:move.w    d0,$6(a5)
  9937.     move.b    $1a(a6),d0
  9938.     lsr.w    #$2,d0
  9939.     and.w    #$3c,d0
  9940.     add.b    d0,$1b(a6)
  9941.     rts
  9942.  
  9943. mt_nop:    move.w    $10(a6),$6(a5)
  9944.     rts
  9945.  
  9946.  
  9947. mt_checkcom:
  9948.     move.w    $2(a6),d0
  9949.     and.w    #$fff,d0
  9950.     beq.s    mt_nop
  9951.     move.b    $2(a6),d0
  9952.     and.b    #$f,d0
  9953.     tst.b    d0
  9954.     beq    mt_arpeggio
  9955.     cmp.b    #$1,d0
  9956.     beq.s    mt_portup
  9957.     cmp.b    #$2,d0
  9958.     beq    mt_portdown
  9959.     cmp.b    #$3,d0
  9960.     beq    mt_myport
  9961.     cmp.b    #$4,d0
  9962.     beq    mt_vib
  9963.     move.w    $10(a6),$6(a5)
  9964.     cmp.b    #$a,d0
  9965.     beq.s    mt_volslide
  9966.     rts
  9967.  
  9968. mt_volslide:
  9969.     moveq    #0,d0
  9970.     move.b    $3(a6),d0
  9971.     lsr.b    #4,d0
  9972.     tst.b    d0
  9973.     beq.s    mt_voldown
  9974.     add.w    d0,$12(a6)
  9975.     cmp.w    #$40,$12(a6)
  9976.     bmi.s    mt_vol2
  9977.     move.w    #$40,$12(a6)
  9978. mt_vol2:move.w    $12(a6),d0
  9979.     asr.w #2,d0
  9980.     move.w d0,$8(a5)
  9981.     rts
  9982.  
  9983. mt_voldown:
  9984.     moveq    #0,d0
  9985.     move.b    $3(a6),d0
  9986.     and.b    #$f,d0
  9987.     sub.w    d0,$12(a6)
  9988.     bpl.s    mt_vol3
  9989.     clr.w    $12(a6)
  9990. mt_vol3:move.w    $12(a6),d0
  9991.     asr.w #2,d0
  9992.     move.w d0,$8(a5)
  9993.     rts
  9994.  
  9995. mt_portup:
  9996.     moveq    #0,d0
  9997.     move.b    $3(a6),d0
  9998.     sub.w    d0,$10(a6)
  9999.     move.w    $10(a6),d0
  10000.     and.w    #$fff,d0
  10001.     cmp.w    #$71,d0
  10002.     bpl.s    mt_por2
  10003.     and.w    #$f000,$10(a6)
  10004.     or.w    #$71,$10(a6)
  10005. mt_por2:move.w    $10(a6),d0
  10006.     and.w    #$fff,d0
  10007.     move.w    d0,$6(a5)
  10008.     rts
  10009.  
  10010. mt_portdown:
  10011.     clr.w    d0
  10012.     move.b    $3(a6),d0
  10013.     add.w    d0,$10(a6)
  10014.     move.w    $10(a6),d0
  10015.     and.w    #$fff,d0
  10016.     cmp.w    #$358,d0
  10017.     bmi.s    mt_por3
  10018.     and.w    #$f000,$10(a6)
  10019.     or.w    #$358,$10(a6)
  10020. mt_por3:move.w    $10(a6),d0
  10021.     and.w    #$fff,d0
  10022.     move.w    d0,$6(a5)
  10023.     rts
  10024.  
  10025. mt_checkcom2:
  10026.     move.b    $2(a6),d0
  10027.     and.b    #$f,d0
  10028.     cmp.b    #$e,d0
  10029.     beq.s    mt_setfilt
  10030.     cmp.b    #$d,d0
  10031.     beq.s    mt_pattbreak
  10032.     cmp.b    #$b,d0
  10033.     beq.s    mt_posjmp
  10034.     cmp.b    #$c,d0
  10035.     beq.s    mt_setvol
  10036.     cmp.b    #$f,d0
  10037.     beq.s    mt_setspeed
  10038.     rts
  10039.  
  10040. mt_setfilt:
  10041.     move.b    $3(a6),d0
  10042.     and.b    #$1,d0
  10043.     asl.b    #$1,d0
  10044.     and.b    #$fd,$bfe001
  10045.     or.b    d0,$bfe001
  10046.     rts
  10047. mt_pattbreak:
  10048.     not.b    mt_break
  10049.     rts
  10050. mt_posjmp:
  10051.     st reachedend
  10052.     move.b    $3(a6),d0
  10053.     subq.b    #$1,d0
  10054.     move.b    d0,mt_songpos
  10055.     not.b    mt_break
  10056.     rts
  10057. mt_setvol:
  10058.     cmp.b    #$40,$3(a6)
  10059.     ble.s    mt_vol4
  10060.     move.b    #$40,$3(a6)
  10061. mt_vol4:move.b    $3(a6),d0
  10062.     asr.w #2,d0
  10063.     move.w d0,$8(a5)
  10064.     rts
  10065. mt_setspeed:
  10066.     cmp.b    #$1f,$3(a6)
  10067.     ble.s    mt_sets
  10068.     move.b    #$1f,$3(a6)
  10069. mt_sets:move.b    $3(a6),d0
  10070.     beq.s    mt_rts2
  10071.     move.b    d0,mt_speed
  10072.     clr.b    mt_counter
  10073. mt_rts2:rts
  10074.  
  10075. mt_sin:
  10076.  DC.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  10077.  DC.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  10078.  
  10079. mt_periods:
  10080.  DC.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  10081.  DC.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  10082.  DC.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  10083.  DC.w $007f,$0078,$0071,$0000,$0000
  10084.  
  10085. reachedend: dc.b 0
  10086. mt_speed:    DC.b    6
  10087. mt_songpos:    DC.b    0
  10088. mt_pattpos:    DC.w    0
  10089. mt_counter:    DC.b    0
  10090.  
  10091. mt_break:    DC.b    0
  10092. mt_dmacon:    DC.w    0
  10093. mt_samplestarts:DS.L    $1f
  10094. mt_voice1:    DS.w    10
  10095.         DC.w    1
  10096.         DS.w    3
  10097. mt_voice2:    DS.w    10
  10098.         DC.w    2
  10099.         DS.w    3
  10100. mt_voice3:    DS.w    10
  10101.         DC.w    4
  10102.         DS.w    3
  10103. mt_voice4:    DS.w    10
  10104.         DC.w    8
  10105.         DS.w    3
  10106.  
  10107. testchip: dc.w 0
  10108.  
  10109. ;/* End of File */
  10110. mt_data: dc.l 0
  10111. tstchip: dc.l 0
  10112.  include "SERIAL_NIGHTMARE"
  10113.  
  10114. ingame:
  10115. ; incbin "ab3:includes/ingame"
  10116. gameover: incbin "ab3:includes/gameover"
  10117. welldone: incbin "ab3:includes/welldone"
  10118.